Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
snake_case routing::NetPoint
[simgrid.git] / include / simgrid / kernel / future.hpp
index e779c0a..7662939 100644 (file)
@@ -204,23 +204,31 @@ public:
   }
 };
 
-template<class T>
-void bindPromise(Promise<T> promise, Future<T> future)
+template <class T> void bind_promise(Promise<T> promise, Future<T> future)
 {
   class PromiseBinder {
   public:
     explicit PromiseBinder(Promise<T> promise) : promise_(std::move(promise)) {}
-    void operator()(Future<T> future)
-    {
-      simgrid::xbt::setPromise(promise_, future);
-    }
+    void operator()(Future<T> future) { simgrid::xbt::set_promise(promise_, future); }
+
   private:
     Promise<T> promise_;
   };
   future.then_(PromiseBinder(std::move(promise)));
 }
 
-template<class T> Future<T> unwrapFuture(Future<Future<T>> future);
+template <class T> Future<T> unwrap_future(Future<Future<T>> future);
+
+template <class T>
+XBT_ATTRIB_DEPRECATED_v323("Please use bind_promise") void bindPromise(Promise<T> promise, Future<T> future)
+{
+  bind_promise(promise, future);
+}
+template <class T>
+XBT_ATTRIB_DEPRECATED_v323("Please use unwrap_future") Future<T> unwrapFuture(Future<Future<T>> future)
+{
+  unwrap_future(future);
+}
 
 /** Result of some (probably) asynchronous operation in the SimGrid kernel
  *
@@ -327,17 +335,14 @@ public:
       throw std::future_error(std::future_errc::no_state);
     // Give shared-ownership to the continuation:
     auto state = std::move(state_);
-    state->set_continuation(simgrid::xbt::makeTask(
-      std::move(continuation), state));
+    state->set_continuation(simgrid::xbt::make_task(std::move(continuation), state));
   }
 
   /** Attach a continuation to this future
    *
    *  This version never does future unwrapping.
    */
-  template<class F>
-  auto thenNoUnwrap(F continuation)
-  -> Future<decltype(continuation(std::move(*this)))>
+  template <class F> auto then_no_unwrap(F continuation) -> Future<decltype(continuation(std::move(*this)))>
   {
     typedef decltype(continuation(std::move(*this))) R;
     if (state_ == nullptr)
@@ -347,18 +352,23 @@ public:
     Promise<R> promise;
     Future<R> future = promise.get_future();
     // ...and when the current future is ready...
-    state->set_continuation(simgrid::xbt::makeTask(
-      [](Promise<R> promise, std::shared_ptr<FutureState<T>> state, F continuation) {
-        // ...set the new future value by running the continuation.
-        Future<T> future(std::move(state));
-        simgrid::xbt::fulfillPromise(promise,[&]{
-          return continuation(std::move(future));
-        });
-      },
-      std::move(promise), state, std::move(continuation)));
+    state->set_continuation(simgrid::xbt::make_task(
+        [](Promise<R> promise, std::shared_ptr<FutureState<T>> state, F continuation) {
+          // ...set the new future value by running the continuation.
+          Future<T> future(std::move(state));
+          simgrid::xbt::fulfill_promise(promise, [&] { return continuation(std::move(future)); });
+        },
+        std::move(promise), state, std::move(continuation)));
     return std::move(future);
   }
 
+  template <class F>
+  XBT_ATTRIB_DEPRECATED_v323("Please use then_no_unwrap") auto thenNoUnwrap(F continuation)
+      -> Future<decltype(continuation(std::move(*this)))>
+  {
+    then_no_unwrap(continuation);
+  }
+
   /** Attach a continuation to this future
    *
    *  The future must be valid in order to make this call.
@@ -373,7 +383,7 @@ public:
   auto then(F continuation) -> typename std::enable_if<not is_future<decltype(continuation(std::move(*this)))>::value,
                                                        Future<decltype(continuation(std::move(*this)))>>::type
   {
-    return this->thenNoUnwrap(std::move(continuation));
+    return this->then_no_unwrap(std::move(continuation));
   }
 
   /** Attach a continuation to this future (future chaining) */
@@ -384,7 +394,7 @@ public:
        decltype(continuation(std::move(*this)))
      >::type
   {
-    return unwrapFuture(this->thenNoUnwap(std::move(continuation)));
+    return unwrap_future(this->then_no_unwrap(std::move(continuation)));
   }
 
   /** Get the value from the future
@@ -410,12 +420,11 @@ private:
   std::shared_ptr<FutureState<T>> state_;
 };
 
-template<class T>
-Future<T> unwrapFuture(Future<Future<T>> future)
+template <class T> Future<T> unwrap_future(Future<Future<T>> future)
 {
   Promise<T> promise;
   Future<T> result = promise.get_future();
-  bindPromise(std::move(promise), std::move(future));
+  bind_promise(std::move(promise), std::move(future));
   return std::move(result);
 }