Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Update copyright lines.
[simgrid.git] / include / simgrid / kernel / future.hpp
index c55f741..7940230 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (c) 2016-2019. The SimGrid Team.
+/* Copyright (c) 2016-2021. The SimGrid Team.
  * All rights reserved.                                                     */
 
 /* This program is free software; you can redistribute it and/or modify it
@@ -48,7 +48,7 @@ public:
   FutureStateBase(FutureStateBase const&) = delete;
   FutureStateBase& operator=(FutureStateBase const&) = delete;
 
-  XBT_PUBLIC void schedule(simgrid::xbt::Task<void()>&& job);
+  XBT_PUBLIC void schedule(simgrid::xbt::Task<void()>&& job) const;
 
   void set_exception(std::exception_ptr exception)
   {
@@ -283,13 +283,9 @@ public:
 
   // Move type:
   Future(Future&) = delete;
-  Future& operator=(Future&) = delete;
-  Future(Future&& that) : state_(std::move(that.state_)) {}
-  Future& operator=(Future&& that)
-  {
-    state_ = std::move(that.state_);
-    return *this;
-  }
+  Future& operator=(const Future&) = delete;
+  Future(Future&&) noexcept        = default;
+  Future& operator=(Future&&) noexcept = default;
 
   /** Whether the future is valid:.
    *
@@ -333,7 +329,7 @@ public:
    */
   template <class F> auto then_no_unwrap(F continuation) -> Future<decltype(continuation(std::move(*this)))>
   {
-    typedef decltype(continuation(std::move(*this))) R;
+    using R = decltype(continuation(std::move(*this)));
     if (state_ == nullptr)
       throw std::future_error(std::future_errc::no_state);
     auto state = std::move(state_);
@@ -451,9 +447,9 @@ public:
   // Move type
   Promise(Promise const&) = delete;
   Promise& operator=(Promise const&) = delete;
-  Promise(Promise&& that) : state_(std::move(that.state_)) { std::swap(future_get_, that.future_get_); }
+  Promise(Promise&& that) noexcept : state_(std::move(that.state_)) { std::swap(future_get_, that.future_get_); }
 
-  Promise& operator=(Promise&& that)
+  Promise& operator=(Promise&& that) noexcept
   {
     this->state_ = std::move(that.state_);
     this->future_get_ = that.future_get_;
@@ -489,7 +485,7 @@ public:
   }
 
 private:
-  std::shared_ptr<FutureState<T>> state_{new FutureState<T>()};
+  std::shared_ptr<FutureState<T>> state_ = std::make_shared<FutureState<T>>();
   bool future_get_ = false;
 };
 
@@ -508,8 +504,8 @@ public:
   // Move type
   Promise(Promise const&) = delete;
   Promise& operator=(Promise const&) = delete;
-  Promise(Promise&& that) : state_(std::move(that.state_)) { std::swap(future_get_, that.future_get_); }
-  Promise& operator=(Promise&& that)
+  Promise(Promise&& that) noexcept : state_(std::move(that.state_)) { std::swap(future_get_, that.future_get_); }
+  Promise& operator=(Promise&& that) noexcept
   {
     this->state_ = std::move(that.state_);
     this->future_get_ = that.future_get_;
@@ -526,13 +522,13 @@ public:
     future_get_ = true;
     return Future<void>(state_);
   }
-  void set_value()
+  void set_value() const
   {
     if (state_ == nullptr)
       throw std::future_error(std::future_errc::no_state);
     state_->set_value();
   }
-  void set_exception(std::exception_ptr exception)
+  void set_exception(std::exception_ptr exception) const
   {
     if (state_ == nullptr)
       throw std::future_error(std::future_errc::no_state);
@@ -540,7 +536,7 @@ public:
   }
 
 private:
-  std::shared_ptr<FutureState<void>> state_{new FutureState<void>()};
+  std::shared_ptr<FutureState<void>> state_ = std::make_shared<FutureState<void>>();
   bool future_get_ = false;
 };