move Futures from folly::wangle to folly
authorJames Sedgwick <jsedgwick@fb.com>
Mon, 12 Jan 2015 14:48:32 +0000 (06:48 -0800)
committerViswanath Sivakumar <viswanath@fb.com>
Tue, 13 Jan 2015 19:01:05 +0000 (11:01 -0800)
Summary: Namespace change. Next up is to extract the Executors into folly/executors/

Test Plan: wait for contbuild

Reviewed By: davejwatson@fb.com

Subscribers: jsedgwick, trunkagent, fbcode-common-diffs@, chaoyc, search-fbcode-diffs@, lars, davejwatson, ruibalp, hero-diffs@, zeus-diffs@, andrewcox, vikas, mcduff, cold-storage-diffs@, unicorn-diffs@, ldbrandy, targeting-diff-backend@, netego-diffs@, abirchall, fugalh, adamsyta, atlas2-eng@, chenzhimin, mpawlowski, alandau, bmatheny, adityab, everstore-dev@, zhuohuang, mwa, jgehring, prometheus-diffs@, smarlow, akr, bnitka, jcoens, benj, laser-diffs@, zhguo, jying, darshan, micha, apodsiadlo, alikhtarov, fuegen, dzhulgakov, jeremyfein, mshneer, folly-diffs@, wch, lins, tingy, hannesr, maxwellsayles

FB internal diff: D1772779

Tasks: 5960242

Signature: t1:1772779:1420751149:bc0b9220be25f1d46d9cef3fdeaa9c3681217aff

34 files changed:
folly/futures/Future-inl.h
folly/futures/Future.cpp
folly/futures/Future.h
folly/futures/InlineExecutor.h
folly/futures/ManualExecutor.cpp
folly/futures/ManualExecutor.h
folly/futures/OpaqueCallbackShunt.h
folly/futures/Promise-inl.h
folly/futures/Promise.h
folly/futures/QueuedImmediateExecutor.cpp
folly/futures/QueuedImmediateExecutor.h
folly/futures/README.md
folly/futures/ScheduledExecutor.h
folly/futures/Timekeeper.h
folly/futures/Try-inl.h
folly/futures/Try.h
folly/futures/WangleException.h
folly/futures/detail/Core.h
folly/futures/detail/FSM.h
folly/futures/detail/ThreadWheelTimekeeper.cpp
folly/futures/detail/ThreadWheelTimekeeper.h
folly/futures/detail/Types.h
folly/futures/test/Benchmark.cpp
folly/futures/test/ExecutorTest.cpp
folly/futures/test/FSM.cpp
folly/futures/test/FutureTest.cpp
folly/futures/test/Interrupts.cpp
folly/futures/test/Thens.h
folly/futures/test/TimekeeperTest.cpp
folly/futures/test/Try.cpp
folly/futures/test/ViaTest.cpp
folly/io/async/README.md
folly/wangle/channel/AsyncSocketHandler.h
folly/wangle/concurrent/test/ThreadPoolExecutorTest.cpp

index c19f08a02147a00f688564aea2cbfe4245887c3a..b45545f9b86cab6c726a18e0670f1a2209dc132b 100644 (file)
@@ -23,7 +23,7 @@
 #include <folly/futures/detail/Core.h>
 #include <folly/futures/Timekeeper.h>
 
-namespace folly { namespace wangle {
+namespace folly {
 
 class Timekeeper;
 
@@ -724,7 +724,7 @@ namespace {
     auto token = std::make_shared<std::atomic<bool>>();
     folly::Baton<> baton;
 
-    folly::wangle::detail::getTimekeeperSingleton()->after(dur)
+    folly::detail::getTimekeeperSingleton()->after(dur)
       .then([&,token](Try<void> const& t) {
         if (token->exchange(true) == false) {
           try {
@@ -797,7 +797,7 @@ Future<T> Future<T>::within(Duration dur, E e, Timekeeper* tk) {
   auto ctx = std::make_shared<Context>(std::move(e));
 
   if (!tk) {
-    tk = folly::wangle::detail::getTimekeeperSingleton();
+    tk = folly::detail::getTimekeeperSingleton();
   }
 
   tk->after(dur)
@@ -834,7 +834,7 @@ Future<T> Future<T>::delayed(Duration dur, Timekeeper* tk) {
     });
 }
 
-}}
+}
 
 // I haven't included a Future<T&> specialization because I don't forsee us
 // using it, however it is not difficult to add when needed. Refer to
index fc7ff9b4002f8ef15d88adf25414967c617475d6..7d87a3fdd52e94c8c217c608db0b1d0b9d1b37ec 100644 (file)
@@ -17,7 +17,7 @@
 #include <folly/futures/detail/ThreadWheelTimekeeper.h>
 #include <folly/Likely.h>
 
-namespace folly { namespace wangle { namespace futures {
+namespace folly { namespace futures {
 
 Future<void> sleep(Duration dur, Timekeeper* tk) {
   if (LIKELY(!tk)) {
@@ -26,4 +26,4 @@ Future<void> sleep(Duration dur, Timekeeper* tk) {
   return tk->after(dur);
 }
 
-}}}
+}}
index e61c530c6b87598cfaa816387624be7ff1a0a6b4..494bf6e1217fe4255e5d0529573ef6ca0e5467eb 100644 (file)
@@ -30,7 +30,7 @@
 #include <folly/futures/WangleException.h>
 #include <folly/futures/detail/Types.h>
 
-namespace folly { namespace wangle {
+namespace folly {
 
 template <class> struct Promise;
 
@@ -626,6 +626,6 @@ Future<T> waitWithSemaphore(Future<T>&& f);
 template <typename T, class Dur>
 Future<T> waitWithSemaphore(Future<T>&& f, Dur timeout);
 
-}} // folly::wangle
+} // folly
 
 #include <folly/futures/Future-inl.h>
index e6924085d933b685ec369a7e1457be8ec690350c..2b5a07f3167503eca30514bf962acfb361a7347b 100644 (file)
@@ -17,7 +17,7 @@
 #pragma once
 #include <folly/Executor.h>
 
-namespace folly { namespace wangle {
+namespace folly {
 
   /// When work is "queued", execute it immediately inline.
   /// Usually when you think you want this, you actually want a
@@ -29,4 +29,4 @@ namespace folly { namespace wangle {
     }
   };
 
-}}
+}
index e75ae72abe78a6a671719c4469964d7fd0f11e0a..c18476e58d92f30a04d4595e0aba04dc52513a32 100644 (file)
@@ -22,7 +22,7 @@
 
 #include <stdexcept>
 
-namespace folly { namespace wangle {
+namespace folly {
 
 ManualExecutor::ManualExecutor() {
   if (sem_init(&sem_, 0, 0) == -1) {
@@ -101,4 +101,4 @@ void ManualExecutor::advanceTo(TimePoint const& t) {
   run();
 }
 
-}} // namespace
+} // folly
index b17a0bdef2772fcb0a70e80a61dcc99225ca2239..db6a17dad34da566ce30c7e7748f75fcdc8b51a1 100644 (file)
@@ -22,7 +22,7 @@
 #include <queue>
 #include <cstdio>
 
-namespace folly { namespace wangle {
+namespace folly {
   /// A ManualExecutor only does work when you turn the crank, by calling
   /// run() or indirectly with makeProgress() or waitFor().
   ///
@@ -117,4 +117,4 @@ namespace folly { namespace wangle {
     TimePoint now_ = now_.min();
   };
 
-}}
+}
index 7977fb085033ad45c7c559558c586638ef716e05..fae7a9c09d2b91cb3caaa59729dcabfce52bd34b 100644 (file)
@@ -18,7 +18,7 @@
 
 #include <folly/futures/Promise.h>
 
-namespace folly { namespace wangle {
+namespace folly {
 
 /// These classes help you wrap an existing C style callback function
 /// into a Future.
@@ -49,9 +49,9 @@ public:
       static_cast<OpaqueCallbackShunt<T>*>(arg));
     handle->promise_.setValue(std::move(handle->obj_));
   }
-  folly::wangle::Promise<T> promise_;
+  folly::Promise<T> promise_;
 private:
   T obj_;
 };
 
-}} // folly::wangle
+} // folly
index 75b260cca653385f2db58a9485ad0ccebdda6ae6..044f94f1934739c92867ce87ca607c5ac4eb4412 100644 (file)
@@ -22,7 +22,7 @@
 #include <folly/futures/WangleException.h>
 #include <folly/futures/detail/Core.h>
 
-namespace folly { namespace wangle {
+namespace folly {
 
 template <class T>
 Promise<T>::Promise() : retrieved_(false), core_(new detail::Core<T>())
@@ -136,4 +136,4 @@ void Promise<T>::fulfil(F&& func) {
   fulfilTry(makeTryFunction(std::forward<F>(func)));
 }
 
-}}
+}
index 58b7323065162ca571c566c382aad21d7950e041..192b1a79d48f5fef2cd250fb1a8366d102d277f7 100644 (file)
@@ -20,7 +20,7 @@
 #include <folly/futures/Try.h>
 #include <functional>
 
-namespace folly { namespace wangle {
+namespace folly {
 
 // forward declaration
 template <class T> class Future;
@@ -102,7 +102,7 @@ private:
   void detach();
 };
 
-}}
+}
 
 #include <folly/futures/Future.h>
 #include <folly/futures/Promise-inl.h>
index c972287806f8b46ae0c62fea1d9994222f05fd18..f31d1d003f10adde912fedcadf03ca9def336acd 100644 (file)
@@ -18,7 +18,7 @@
 #include <folly/ThreadLocal.h>
 #include <queue>
 
-namespace folly { namespace wangle {
+namespace folly {
 
 void QueuedImmediateExecutor::add(Func callback) {
   thread_local std::queue<Func> q;
@@ -34,4 +34,4 @@ void QueuedImmediateExecutor::add(Func callback) {
   }
 }
 
-}} // namespace
+} // namespace
index a82c32dbdb58b5d6c2bed19f79d2d0c57d2a5103..73b7225a91246ff9999cfd0d5d86589eee1aca9d 100644 (file)
@@ -18,7 +18,7 @@
 
 #include <folly/Executor.h>
 
-namespace folly { namespace wangle {
+namespace folly {
 
 /**
  * Runs inline like InlineExecutor, but with a queue so that any tasks added
@@ -30,4 +30,4 @@ class QueuedImmediateExecutor : public Executor {
   void add(Func) override;
 };
 
-}} // namespace
+} // folly
index cec17f56801b0bb29752f7ebb012fdbc13b5044b..633b74385022c434341f1ccc6febcdbd76fb776f 100644 (file)
@@ -19,7 +19,7 @@ The primary semantic differences are that Wangle Futures and Promises are not th
 
 ```C++
 #include <folly/futures/Future.h>
-using namespace folly::wangle;
+using namespace folly;
 using namespace std;
 
 void foo(int x) {
index 94850c28782b30e856d558488df0629df7b88b09..a3f6dedbae65a58c0ede209fecff3ea0495410e7 100644 (file)
@@ -21,7 +21,7 @@
 #include <memory>
 #include <stdexcept>
 
-namespace folly { namespace wangle {
+namespace folly {
   // An executor that supports timed scheduling. Like RxScheduler.
   class ScheduledExecutor : public Executor {
    public:
@@ -54,4 +54,4 @@ namespace folly { namespace wangle {
        return std::chrono::steady_clock::now();
      }
   };
-}}
+}
index 7bbdddc5763cd0674326558542f9a5ab47dfd915..07c0c41d1790bd44f953f03e674a20cfde9ab99a 100644 (file)
@@ -18,7 +18,7 @@
 
 #include <folly/futures/detail/Types.h>
 
-namespace folly { namespace wangle {
+namespace folly {
 
 template <class> struct Future;
 
@@ -68,23 +68,23 @@ class Timekeeper {
   Future<void> at(std::chrono::time_point<Clock> when);
 };
 
-}}
+} // namespace folly
 
 // now get those definitions
 #include <folly/futures/Future.h>
 
 // finally we can use Future
-namespace folly { namespace wangle {
+namespace folly {
 
-  template <class Clock>
-  Future<void> Timekeeper::at(std::chrono::time_point<Clock> when) {
-    auto now = Clock::now();
-
-    if (when <= now) {
-      return makeFuture();
-    }
+template <class Clock>
+Future<void> Timekeeper::at(std::chrono::time_point<Clock> when) {
+  auto now = Clock::now();
 
-    return after(when - now);
+  if (when <= now) {
+    return makeFuture();
   }
 
-}}
+  return after(when - now);
+}
+
+} // namespace folly
index 0aded746de8e68445048236e0a006aec3dd2b4d7..05cb4ccec3db4a645a1668729c192ceb29b40cf7 100644 (file)
@@ -20,7 +20,7 @@
 
 #include <folly/futures/WangleException.h>
 
-namespace folly { namespace wangle {
+namespace folly {
 
 template <class T>
 Try<T>::Try(Try<T>&& t) : contains_(t.contains_) {
@@ -82,11 +82,11 @@ void Try<void>::throwIfFailed() const {
 }
 
 template <typename T>
-inline T moveFromTry(wangle::Try<T>&& t) {
+inline T moveFromTry(Try<T>&& t) {
   return std::move(t.value());
 }
 
-inline void moveFromTry(wangle::Try<void>&& t) {
+inline void moveFromTry(Try<void>&& t) {
   return t.value();
 }
 
@@ -120,4 +120,4 @@ makeTryFunction(F&& f) {
   }
 }
 
-}}
+} // folly
index e98682d67a91ab626ac037ab0c2a5c9ac23387df..988bf2e86ea26a94a968d28e5312862176eacb6b 100644 (file)
@@ -25,7 +25,7 @@
 #include <folly/futures/Deprecated.h>
 #include <folly/futures/WangleException.h>
 
-namespace folly { namespace wangle {
+namespace folly {
 
 /*
  * Try<T> is a wrapper that contains either an instance of T, an exception, or
@@ -313,14 +313,14 @@ class Try<void> {
  * @returns value contained in t
  */
 template <typename T>
-T moveFromTry(wangle::Try<T>&& t);
+T moveFromTry(Try<T>&& t);
 
 /*
  * Throws if try contained an exception.
  *
  * @param t Try to move from
  */
-void moveFromTry(wangle::Try<void>&& t);
+void moveFromTry(Try<void>&& t);
 
 /*
  * @param f a function to execute and capture the result of (value or exception)
@@ -346,7 +346,6 @@ typename std::enable_if<
   Try<void>>::type
 makeTryFunction(F&& f);
 
-
-}}
+} // folly
 
 #include <folly/futures/Try-inl.h>
index 0d971303256e02fca6b93c72f4b34a9747eeb2d0..bfbbf39f0ff6a47a623823a00195fd5e68d9dd66 100644 (file)
@@ -19,7 +19,7 @@
 #include <exception>
 #include <string>
 
-namespace folly { namespace wangle {
+namespace folly {
 
 class WangleException : public std::exception {
 
@@ -91,4 +91,4 @@ class TimedOut : public WangleException {
   TimedOut() : WangleException("Timed out") {}
 };
 
-}}
+}
index 1eb7062c7f4544c63df5b8c0299dd1baef359ae5..0c39212d6647278e2829da8521aed025ff4d9127 100644 (file)
@@ -32,7 +32,7 @@
 
 #include <folly/io/async/Request.h>
 
-namespace folly { namespace wangle { namespace detail {
+namespace folly { namespace detail {
 
 // As of GCC 4.8.1, the std::function in libstdc++ optimizes only for pointers
 // to functions, using a helper avoids a call to malloc.
@@ -289,4 +289,4 @@ struct WhenAnyContext {
   }
 };
 
-}}} // namespace
+}} // folly::detail
index be4eb8aefb66ba2219b5304d1e62e11572c8b416..997b6c21f8555e8fd619cfd449a4f69e4f3d3ef3 100644 (file)
@@ -20,7 +20,7 @@
 #include <mutex>
 #include <folly/SmallLocks.h>
 
-namespace folly { namespace wangle { namespace detail {
+namespace folly { namespace detail {
 
 /// Finite State Machine helper base class.
 /// Inherit from this.
@@ -119,4 +119,4 @@ public:
 #define FSM_END }}}
 
 
-}}}
+}} // folly::detail
index d77e68e90c4f595a0cd5fce91d9b7151141439c5..28ae72de40f460ce23ec598d9ca2d096bdb0f435 100644 (file)
@@ -19,7 +19,7 @@
 #include <folly/futures/Future.h>
 #include <future>
 
-namespace folly { namespace wangle { namespace detail {
+namespace folly { namespace detail {
 
 namespace {
   Singleton<ThreadWheelTimekeeper> timekeeperSingleton_;
@@ -90,4 +90,4 @@ Timekeeper* getTimekeeperSingleton() {
   return timekeeperSingleton_.get_fast();
 }
 
-}}}
+}} // folly::detail
index 1174dceb593d2b073682fb652d3f6109cc55f2ce..33b1261f73fcc385035673e1e497dd2a0c709eb7 100644 (file)
@@ -22,7 +22,7 @@
 #include <folly/io/async/HHWheelTimer.h>
 #include <thread>
 
-namespace folly { namespace wangle { namespace detail {
+namespace folly { namespace detail {
 
 /// The default Timekeeper implementation which uses a HHWheelTimer on an
 /// EventBase in a dedicated thread. Users needn't deal with this directly, it
@@ -47,4 +47,4 @@ class ThreadWheelTimekeeper : public Timekeeper {
 
 Timekeeper* getTimekeeperSingleton();
 
-}}}
+}} // folly::detail
index 57b93e053032685a4cc5b47e61f52d493c10d234..873a591f4f878657be83ea4e97521d863a8d7de5 100644 (file)
@@ -18,8 +18,8 @@
 
 #include <chrono>
 
-namespace folly { namespace wangle {
+namespace folly {
 
 using Duration = std::chrono::milliseconds;
 
-}}
+}
index 0f73d3f116c155a8a66b7208c0aa29ab32150468..c6f88bdc159c37ac49bb82b5f88317ebb8d57376 100644 (file)
@@ -22,7 +22,7 @@
 #include <semaphore.h>
 #include <vector>
 
-using namespace folly::wangle;
+using namespace folly;
 using namespace std;
 
 namespace {
index 2e9a3f6afee63bd3a88cb296fc509cc76e9b4104..a9bfef4b6f033537c7021a2df5f4281321c94327 100644 (file)
@@ -21,7 +21,7 @@
 #include <folly/futures/Future.h>
 #include <folly/Baton.h>
 
-using namespace folly::wangle;
+using namespace folly;
 using namespace std::chrono;
 using namespace testing;
 
index e4fef36b4b6438ca104adeee9012c71a03d89aa7..4f4710f58ad8d5bc5b62733ac95b85df29ac0b43 100644 (file)
@@ -17,7 +17,7 @@
 #include <gtest/gtest.h>
 #include <folly/futures/detail/FSM.h>
 
-using namespace folly::wangle::detail;
+using namespace folly::detail;
 
 enum class State { A, B };
 
index c135bf2f94f19ffd1ef5a82a7bc66cafa89b960f..cbb944727cd3f2c7782bae3f35c1c2b0123628c8 100644 (file)
@@ -32,7 +32,6 @@
 #include <folly/io/async/Request.h>
 
 using namespace folly;
-using namespace folly::wangle;
 using std::pair;
 using std::string;
 using std::unique_ptr;
@@ -1187,7 +1186,7 @@ TEST(Future, CircularDependencySharedPtrSelfReset) {
   auto ptr = std::make_shared<Future<int64_t>>(promise.getFuture());
 
   ptr->then(
-    [ptr] (folly::wangle::Try<int64_t>&& uid) mutable {
+    [ptr] (folly::Try<int64_t>&& uid) mutable {
       EXPECT_EQ(1, ptr.use_count());
 
       // Leaving no references to ourselves.
index d4a35a750e6a8b5df04bf3bd9a1a37b660bb6287..7ef88f70311eee11eb0e5d082b7131695882fafd 100644 (file)
@@ -19,7 +19,7 @@
 #include <folly/futures/Future.h>
 #include <folly/futures/Promise.h>
 
-using namespace folly::wangle;
+using namespace folly;
 using folly::exception_wrapper;
 
 TEST(Interrupts, raise) {
index d65d914fe4adcab153728fba055bf5205e998b46..e8e8a8e53c69b832aa4c760d5774c716e8d0bf2b 100644 (file)
@@ -20,7 +20,7 @@
 #include <folly/futures/Future.h>
 #include <folly/Executor.h>
 
-using namespace folly::wangle;
+using namespace folly;
 using namespace std;
 using namespace testing;
 
index 2ede467355f3171051ac86d3c9b9a2ab88f0d7d5..c3e53d359bb2e1b39cf452e2b03ebb8618f48099 100644 (file)
 #include <folly/futures/Timekeeper.h>
 #include <unistd.h>
 
-using namespace folly::wangle;
+using namespace folly;
 using namespace std::chrono;
-using folly::wangle::Timekeeper;
-using Duration = folly::wangle::Duration;
+using folly::Timekeeper;
+using Duration = folly::Duration;
 
 std::chrono::milliseconds const one_ms(1);
 std::chrono::milliseconds const awhile(10);
@@ -32,7 +32,7 @@ std::chrono::steady_clock::time_point now() {
 
 struct TimekeeperFixture : public testing::Test {
   TimekeeperFixture() :
-    timeLord_(folly::wangle::detail::getTimekeeperSingleton())
+    timeLord_(folly::detail::getTimekeeperSingleton())
   {}
 
   Timekeeper* timeLord_;
@@ -71,7 +71,7 @@ TEST(Timekeeper, futureGetBeforeTimeout) {
 
 TEST(Timekeeper, futureGetTimeout) {
   Promise<int> p;
-  EXPECT_THROW(p.getFuture().get(Duration(1)), folly::wangle::TimedOut);
+  EXPECT_THROW(p.getFuture().get(Duration(1)), folly::TimedOut);
 }
 
 TEST(Timekeeper, futureSleep) {
index 5846f62803336711f4690153fa49fc344c26bac1..db42aa59766c958f4378d7318cce1dd228f56d05 100644 (file)
@@ -19,7 +19,7 @@
 #include <folly/Memory.h>
 #include <folly/futures/Try.h>
 
-using namespace folly::wangle;
+using namespace folly;
 
 TEST(Try, makeTryFunction) {
   auto func = []() {
index d940e10ec49b4b9c46c90dd31fe16f06c074f63c..2bbd89f0e3ede42dc89625adf767af03468d42e8 100644 (file)
@@ -21,7 +21,7 @@
 #include <folly/futures/InlineExecutor.h>
 #include <folly/futures/ManualExecutor.h>
 
-using namespace folly::wangle;
+using namespace folly;
 
 struct ManualWaiter {
   explicit ManualWaiter(std::shared_ptr<ManualExecutor> ex) : ex(ex) {}
index 3b09dd1761ec38d41596c6300bd7f4d662b72b6d..e116c83be8e3e20e2c14bf386f12252722d3288a 100644 (file)
@@ -281,7 +281,7 @@ threads.  Major uses for this include:
 
 In this library only runInEventBaseThread save/restores the request
 context, although other Facebook libraries that pass requests between
-threads do also: folly::wangle::future, and fbthrift::ThreadManager, etc
+threads do also: folly::future, and fbthrift::ThreadManager, etc
 
 ### DelayedDestruction
 
index eb47cb05031aa9f352f2d9e1520a2c8bc756c3b0..46fb03b8a9bb0cbeb9b2a264b32704b5e2e1ea28 100644 (file)
@@ -69,16 +69,16 @@ class AsyncSocketHandler
     ctx_ = ctx;
   }
 
-  folly::wangle::Future<void> write(
+  folly::Future<void> write(
       Context* ctx,
       std::unique_ptr<folly::IOBuf> buf) override {
     if (UNLIKELY(!buf)) {
-      return folly::wangle::makeFuture();
+      return folly::makeFuture();
     }
 
     if (!socket_->good()) {
       VLOG(5) << "socket is closed in write()";
-      return folly::wangle::makeFuture<void>(AsyncSocketException(
+      return folly::makeFuture<void>(AsyncSocketException(
           AsyncSocketException::AsyncSocketExceptionType::NOT_OPEN,
           "socket is closed in write()"));
     }
@@ -89,12 +89,12 @@ class AsyncSocketHandler
     return future;
   };
 
-  folly::wangle::Future<void> close(Context* ctx) {
+  folly::Future<void> close(Context* ctx) {
     if (socket_) {
       detachReadCallback();
       socket_->closeNow();
     }
-    return folly::wangle::makeFuture();
+    return folly::makeFuture();
   }
 
   // Must override to avoid warnings about hidden overloaded virtual due to
@@ -142,7 +142,7 @@ class AsyncSocketHandler
 
    private:
     friend class AsyncSocketHandler;
-    folly::wangle::Promise<void> promise_;
+    folly::Promise<void> promise_;
   };
 
   Context* ctx_{nullptr};
index b83dce282312e3b1908b34a79f327049091d51d8..d08d2e501affa816a9b8c13d87ba961074457b1e 100644 (file)
@@ -21,6 +21,7 @@
 #include <glog/logging.h>
 #include <gtest/gtest.h>
 
+using namespace folly;
 using namespace folly::wangle;
 using namespace std::chrono;