Handle nullptr from getTimekeeperSingleton
[folly.git] / folly / futures / ScheduledExecutor.h
index 94850c28782b30e856d558488df0629df7b88b09..ac77de9d3c6a9015913b03854803bdda5edf05a2 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2014 Facebook, Inc.
+ * 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.
 
 #pragma once
 
-#include <folly/Executor.h>
 #include <chrono>
 #include <memory>
 #include <stdexcept>
 
-namespace folly { namespace wangle {
+#include <folly/Executor.h>
+#include <folly/portability/BitsFunctexcept.h>
+
+namespace folly {
   // An executor that supports timed scheduling. Like RxScheduler.
-  class ScheduledExecutor : public Executor {
+  class ScheduledExecutor : public virtual Executor {
    public:
      // Reality is that better than millisecond resolution is very hard to
      // achieve. However, we reserve the right to be incredible.
      typedef std::chrono::microseconds Duration;
      typedef std::chrono::steady_clock::time_point TimePoint;
 
-     virtual ~ScheduledExecutor() = default;
+     ~ScheduledExecutor() override = default;
 
-     virtual void add(Func) override = 0;
+     void add(Func) override = 0;
 
      /// Alias for add() (for Rx consistency)
      void schedule(Func&& a) { add(std::move(a)); }
@@ -45,8 +47,8 @@ namespace folly { namespace wangle {
 
      /// Schedule a Func to be executed at time t, or as soon afterward as
      /// possible. Expect millisecond resolution at best. Must be threadsafe.
-     virtual void scheduleAt(Func&& a, TimePoint const& t) {
-       throw std::logic_error("unimplemented");
+     virtual void scheduleAt(Func&& /* a */, TimePoint const& /* t */) {
+       std::__throw_logic_error("unimplemented");
      }
 
      /// Get this executor's notion of time. Must be threadsafe.
@@ -54,4 +56,4 @@ namespace folly { namespace wangle {
        return std::chrono::steady_clock::now();
      }
   };
-}}
+}