Future API for CacheClientCommon
authorAndrii Grynenko <andrii@fb.com>
Wed, 23 Apr 2014 02:58:46 +0000 (19:58 -0700)
committerDave Watson <davejwatson@fb.com>
Tue, 20 May 2014 19:53:47 +0000 (12:53 -0700)
Summary:
Allow mutable functors in Promise::fulfil.

Facebook:
Works both with EventBase and without it (thanks to wangle::Future thread-safety). CacheClientImpl lifetime is guaranteed using shared_ptr.

Test Plan: unit test

Reviewed By: stepan@fb.com

FB internal diff: D1291024

folly/wangle/Promise-inl.h
folly/wangle/Promise.h

index 6e7e4947530450c5e1b73055170abff7dd671e4a..490602702eec74686ede50ee993e10433aa74267 100644 (file)
@@ -124,8 +124,8 @@ void Promise<T>::setValue() {
 
 template <class T>
 template <class F>
-void Promise<T>::fulfil(const F& func) {
-  fulfilHelper(func);
+void Promise<T>::fulfil(F&& func) {
+  fulfilHelper(std::forward<F>(func));
 }
 
 template <class T>
@@ -133,7 +133,7 @@ template <class F>
 typename std::enable_if<
   std::is_convertible<typename std::result_of<F()>::type, T>::value &&
   !std::is_same<T, void>::value>::type
-inline Promise<T>::fulfilHelper(const F& func) {
+inline Promise<T>::fulfilHelper(F&& func) {
   throwIfFulfilled();
   try {
     setValue(func());
@@ -147,7 +147,7 @@ template <class F>
 typename std::enable_if<
   std::is_same<typename std::result_of<F()>::type, void>::value &&
   std::is_same<T, void>::value>::type
-inline Promise<T>::fulfilHelper(const F& func) {
+inline Promise<T>::fulfilHelper(F&& func) {
   throwIfFulfilled();
   try {
     func();
index f2a354fdc6e13e153e135fc8dd9b43b91307104a..aae306c0dd7c46f5b82137fd3b4f0cad2477cb46 100644 (file)
@@ -73,7 +73,7 @@ public:
     p.fulfil([] { do something that may throw; return a T; });
   */
   template <class F>
-  void fulfil(const F& func);
+  void fulfil(F&& func);
 
 private:
   typedef typename Future<T>::objPtr objPtr;
@@ -91,13 +91,13 @@ private:
   typename std::enable_if<
     std::is_convertible<typename std::result_of<F()>::type, T>::value &&
     !std::is_same<T, void>::value>::type
-  fulfilHelper(const F& func);
+  fulfilHelper(F&& func);
 
   template <class F>
   typename std::enable_if<
     std::is_same<typename std::result_of<F()>::type, void>::value &&
     std::is_same<T, void>::value>::type
-  fulfilHelper(const F& func);
+  fulfilHelper(F&& func);
 };
 
 }}