Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Chainable CRTPed version of vetoable_start
[simgrid.git] / include / simgrid / s4u / Actor.hpp
index a040274ba0db3d97e4c527dc32c056e55412ff0b..3b3502115ed5390e749d5a7c3313e39b311fd9b8 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (c) 2006-2020. The SimGrid Team. All rights reserved.          */
+/* Copyright (c) 2006-2021. The SimGrid Team. All rights reserved.          */
 
 /* This program is free software; you can redistribute it and/or modify it
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
 #include <simgrid/chrono.hpp>
 #include <xbt/Extendable.hpp>
-#include <xbt/functional.hpp>
 #include <xbt/signal.hpp>
 #include <xbt/string.hpp>
 
 #include <functional>
-#include <map> // deprecated wrappers
 #include <unordered_map>
 
 namespace simgrid {
@@ -50,7 +48,7 @@ class XBT_PUBLIC Actor : public xbt::Extendable<Actor> {
   kernel::actor::ActorImpl* const pimpl_;
 #endif
 
-  explicit Actor(smx_actor_t pimpl) : pimpl_(pimpl) {}
+  explicit Actor(kernel::actor::ActorImpl* pimpl) : pimpl_(pimpl) {}
 
 public:
 #ifndef DOXYGEN
@@ -63,7 +61,7 @@ public:
   friend XBT_PUBLIC void intrusive_ptr_release(const Actor* actor);
 #endif
   /** Retrieve the amount of references on that object. Useful to debug the automatic refcounting */
-  int get_refcount();
+  int get_refcount() const;
 
   // ***** Actor creation *****
   /** Retrieve a reference to myself */
@@ -80,7 +78,7 @@ public:
   /** Signal to others that an actor wakes up for a sleep **/
   static xbt::signal<void(Actor const&)> on_wake_up;
   /** Signal to others that an actor is has been migrated to another host **/
-  static xbt::signal<void(Actor const&, Host const& previous_location)> on_host_change;
+  static xbt::signal<void(const Actor&, const Host& previous_location)> on_host_change;
 #ifndef DOXYGEN
   static xbt::signal<void(Actor const&)> on_migration_start; // XBT_ATTRIB_DEPRECATED_v329
   static xbt::signal<void(Actor const&)> on_migration_end;   // XBT_ATTRIB_DEPRECATED_v329
@@ -105,8 +103,9 @@ public:
   static ActorPtr create(const std::string& name, s4u::Host* host, const std::function<void()>& code);
   /** Create an actor, but don't start it yet.
    *
-   * This is usefull to set some properties or extension before actually starting it */
+   * This is useful to set some properties or extension before actually starting it */
   static ActorPtr init(const std::string& name, s4u::Host* host);
+  ActorPtr set_stacksize(unsigned stacksize);
   /** Start a previously initialized actor */
   ActorPtr start(const std::function<void()>& code);
 
@@ -121,7 +120,7 @@ public:
    * Note that the arguments will be copied, so move-only parameters are forbidden */
   template <class F, class... Args,
             // This constructor is enabled only if the call code(args...) is valid:
-            typename = typename std::result_of<F(Args...)>::type>
+            typename = typename std::result_of_t<F(Args...)>>
   static ActorPtr create(const std::string& name, s4u::Host* host, F code, Args... args)
   {
     return create(name, host, std::bind(std::move(code), std::move(args)...));
@@ -156,7 +155,7 @@ public:
   void resume();
 
   /** Returns true if the actor is suspended. */
-  bool is_suspended();
+  bool is_suspended() const;
 
   /** If set to true, the actor will automatically restart when its host reboots */
   void set_auto_restart(bool autorestart);
@@ -177,7 +176,7 @@ public:
   /** Sets the time at which that actor should be killed */
   void set_kill_time(double time);
   /** Retrieves the time at which that actor will be killed (or -1 if not set) */
-  double get_kill_time();
+  double get_kill_time() const;
 
   /** @brief Moves the actor to another host
    *
@@ -208,14 +207,14 @@ public:
    * Blocks the calling actor until the joined actor is terminated. If actor alice executes bob.join(), then alice is
    * blocked until bob terminates.
    */
-  void join();
+  void join() const;
 
   /** Wait for the actor to finish, or for the timeout to elapse.
    *
    * Blocks the calling actor until the joined actor is terminated. If actor alice executes bob.join(), then alice is
    * blocked until bob terminates.
    */
-  void join(double timeout);
+  void join(double timeout) const;
   /** Kill that actor and restart it from start. */
   Actor* restart();
 
@@ -366,7 +365,7 @@ XBT_PUBLIC void exit();
  * blocking functions forbidden in this setting, but also modifications to the global state.
  *
  * The parameter of on_exit's callbacks denotes whether or not the actor's execution failed.
- * It will be set to true if the actor was killed or failed because of an exception,
+ * It will be set to true if the actor was killed or failed because of an exception or if the simulation deadlocked,
  * while it will remain to false if the actor terminated gracefully.
  */