An InlineExecutor singleton
authorYedidya Feldblum <yfeldblum@fb.com>
Tue, 17 Oct 2017 20:09:48 +0000 (13:09 -0700)
committerFacebook Github Bot <facebook-github-bot@users.noreply.github.com>
Tue, 17 Oct 2017 20:21:00 +0000 (13:21 -0700)
Summary:
[Folly] An `InlineExecutor` singleton.

Using the Leaky Meyers Singleton pattern, so that it is always available whenever required.

Differential Revision: D6074534

fbshipit-source-id: bd4c9cd6a1e60c80de5d2eef1cb6a1e7f16b4e50

folly/futures/InlineExecutor.cpp [new file with mode: 0644]
folly/futures/InlineExecutor.h

diff --git a/folly/futures/InlineExecutor.cpp b/folly/futures/InlineExecutor.cpp
new file mode 100644 (file)
index 0000000..848e7f2
--- /dev/null
@@ -0,0 +1,28 @@
+/*
+ * Copyright 2017 Facebook, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <folly/futures/InlineExecutor.h>
+
+#include <folly/Indestructible.h>
+
+namespace folly {
+
+InlineExecutor& InlineExecutor::instance() {
+  static auto instance = Indestructible<InlineExecutor>{};
+  return *instance;
+}
+
+} // namespace folly
index 5f1ae691f0794055bfbd731e47767194064e12d7..644ff7bf88489743c7e4be367b4477a3528465c7 100644 (file)
 
 namespace folly {
 
-  /// When work is "queued", execute it immediately inline.
-  /// Usually when you think you want this, you actually want a
-  /// QueuedImmediateExecutor.
-  class InlineExecutor : public Executor {
-   public:
-    void add(Func f) override {
-      f();
-    }
-  };
+/// When work is "queued", execute it immediately inline.
+/// Usually when you think you want this, you actually want a
+/// QueuedImmediateExecutor.
+class InlineExecutor : public Executor {
+ public:
+  static InlineExecutor& instance();
 
-}
+  void add(Func f) override {
+    f();
+  }
+};
+
+} // namespace folly