getVia() and waitVia()
[folly.git] / folly / futures / Future-inl.h
index 4eeb084d4d910197e883676d9ecb7e42d4e8332f..34940cedb39d57c410c5182356a86128dc38430a 100644 (file)
@@ -720,6 +720,22 @@ inline void Future<void>::get(Duration dur) {
   getWaitTimeoutHelper(this, dur).value();
 }
 
+template <class T>
+T Future<T>::getVia(DrivableExecutor* e) {
+  while (!isReady()) {
+    e->drive();
+  }
+  return std::move(value());
+}
+
+template <>
+inline void Future<void>::getVia(DrivableExecutor* e) {
+  while (!isReady()) {
+    e->drive();
+  }
+  value();
+}
+
 template <class T>
 Future<T> Future<T>::within(Duration dur, Timekeeper* tk) {
   return within(dur, TimedOut(), tk);
@@ -803,6 +819,22 @@ Future<T> Future<T>::wait(Duration dur) {
   return done;
 }
 
+template <class T>
+Future<T>& Future<T>::waitVia(DrivableExecutor* e) & {
+  while (!isReady()) {
+    e->drive();
+  }
+  return *this;
+}
+
+template <class T>
+Future<T> Future<T>::waitVia(DrivableExecutor* e) && {
+  while (!isReady()) {
+    e->drive();
+  }
+  return std::move(*this);
+}
+
 }
 
 // I haven't included a Future<T&> specialization because I don't forsee us