Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
[sonar] Initialize data members with class initializers, or initialization lists.
[simgrid.git] / include / simgrid / kernel / future.hpp
index e5873bd..c55f741 100644 (file)
@@ -103,7 +103,7 @@ protected:
     status_ = FutureStatus::ready;
     if (continuation_) {
       // We unregister the continuation before executing it.
-      // We need to do this becase the current implementation of the
+      // We need to do this because the current implementation of the
       // continuation has a shared_ptr to the FutureState.
       auto continuation = std::move(continuation_);
       this->schedule(std::move(continuation));
@@ -135,14 +135,13 @@ private:
 /** Shared state for future and promises
  *
  *  You are not expected to use them directly but to create them
- *  implicitely through a @ref simgrid::kernel::Promise.
+ *  implicitly through a @ref simgrid::kernel::Promise.
  *  Alternatively kernel operations could inherit or contain FutureState
  *  if they are managed with std::shared_ptr.
  **/
 template<class T>
 class FutureState : public FutureStateBase {
 public:
-
   void set_value(T value)
   {
     if (this->get_status() != FutureStatus::not_ready)
@@ -222,11 +221,11 @@ template <class T> Future<T> unwrap_future(Future<Future<T>> future);
 /** Result of some (probably) asynchronous operation in the SimGrid kernel
  *
  * @ref simgrid::simix::Future and @ref simgrid::simix::Future provide an
- * abstration for asynchronous stuff happening in the SimGrid kernel. They
+ * abstraction for asynchronous stuff happening in the SimGrid kernel. They
  * are based on C++1z futures.
  *
  * The future represents a value which will be available at some point when this
- * asynchronous operaiont is finished. Alternatively, if this operations fails,
+ * asynchronous operation is finished. Alternatively, if this operations fails,
  * the result of the operation might be an exception.
  *
  *  As the operation is possibly no terminated yet, we cannot get the result
@@ -247,7 +246,7 @@ template <class T> Future<T> unwrap_future(Future<Future<T>> future);
  *    // available:
  *    try {
  *      // Try to get value, this might throw an exception if the operation
- *      // failed (such as an exception throwed by the worker process):
+ *      // failed (such as an exception thrown by the worker process):
  *      std::string value = result.get();
  *      XBT_INFO("Value: %s", value.c_str());
  *    }
@@ -268,7 +267,7 @@ template <class T> Future<T> unwrap_future(Future<Future<T>> future);
  *  * inside the `.then()`, `.get()` can be used;
  *
  *  * `.get()` can only be used when `.is_ready()` (as everything happens in
- *     a single-thread, the future would be guaranted to deadlock if `.get()`
+ *     a single-thread, the future would be guaranteed to deadlock if `.get()`
  *     is called when the future is not ready);
  *
  *  * there is no future chaining support for now (`.then().then()`);
@@ -433,8 +432,8 @@ template <class T> Future<T> unwrap_future(Future<Future<T>> future)
  *      promise.set_value(value);
  *    }
  *    catch (...) {
- *      // If an error occured, we can set an exception which
- *      // will be throwed buy future.get():
+ *      // If an error occurred, we can set an exception which
+ *      // will be thrown by future.get():
  *      promise.set_exception(std::current_exception());
  *    }
  *  });
@@ -446,17 +445,13 @@ template <class T> Future<T> unwrap_future(Future<Future<T>> future)
 template<class T>
 class Promise {
 public:
-  Promise() : state_(std::make_shared<FutureState<T>>()) {}
+  Promise() = default;
   explicit Promise(std::shared_ptr<FutureState<T>> state) : state_(std::move(state)) {}
 
   // Move type
   Promise(Promise const&) = delete;
   Promise& operator=(Promise const&) = delete;
-  Promise(Promise&& that) :
-    state_(std::move(that.state_)), future_get_(that.future_get_)
-  {
-    that.future_get_ = false;
-  }
+  Promise(Promise&& that) : state_(std::move(that.state_)) { std::swap(future_get_, that.future_get_); }
 
   Promise& operator=(Promise&& that)
   {
@@ -494,14 +489,14 @@ public:
   }
 
 private:
-  std::shared_ptr<FutureState<T>> state_;
+  std::shared_ptr<FutureState<T>> state_{new FutureState<T>()};
   bool future_get_ = false;
 };
 
 template<>
 class Promise<void> {
 public:
-  Promise() : state_(std::make_shared<FutureState<void>>()) {}
+  Promise() = default;
   explicit Promise(std::shared_ptr<FutureState<void>> state) : state_(std::move(state)) {}
   ~Promise()
   {
@@ -513,11 +508,7 @@ public:
   // Move type
   Promise(Promise const&) = delete;
   Promise& operator=(Promise const&) = delete;
-  Promise(Promise&& that) :
-    state_(std::move(that.state_)), future_get_(that.future_get_)
-  {
-    that.future_get_ = false;
-  }
+  Promise(Promise&& that) : state_(std::move(that.state_)) { std::swap(future_get_, that.future_get_); }
   Promise& operator=(Promise&& that)
   {
     this->state_ = std::move(that.state_);
@@ -549,7 +540,7 @@ public:
   }
 
 private:
-  std::shared_ptr<FutureState<void>> state_;
+  std::shared_ptr<FutureState<void>> state_{new FutureState<void>()};
   bool future_get_ = false;
 };