Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
further let the actor clean for itself
[simgrid.git] / src / kernel / context / ContextThread.hpp
index 47be1bb..720e54b 100644 (file)
@@ -20,7 +20,7 @@ namespace context {
 
 class XBT_PUBLIC ThreadContext : public AttachContext {
 public:
-  ThreadContext(std::function<void()> code, smx_actor_t actor, bool maestro);
+  ThreadContext(std::function<void()>&& code, actor::ActorImpl* actor, bool maestro);
   ThreadContext(const ThreadContext&) = delete;
   ThreadContext& operator=(const ThreadContext&) = delete;
   ~ThreadContext() override;
@@ -48,12 +48,12 @@ private:
   virtual void yield_hook() { /* empty placeholder, called before yield(). Used in parallel mode */}
   virtual void stop_hook() { /* empty placeholder, called at stop(). Used in Java */}
 
-  static void* wrapper(void *param);
+  static void wrapper(ThreadContext* context);
 };
 
 class XBT_PUBLIC SerialThreadContext : public ThreadContext {
 public:
-  SerialThreadContext(std::function<void()> code, smx_actor_t actor, bool maestro)
+  SerialThreadContext(std::function<void()>&& code, actor::ActorImpl* actor, bool maestro)
       : ThreadContext(std::move(code), actor, maestro)
   {
   }
@@ -63,7 +63,7 @@ public:
 
 class ParallelThreadContext : public ThreadContext {
 public:
-  ParallelThreadContext(std::function<void()> code, smx_actor_t actor, bool maestro)
+  ParallelThreadContext(std::function<void()>&& code, actor::ActorImpl* actor, bool maestro)
       : ThreadContext(std::move(code), actor, maestro)
   {
   }
@@ -85,7 +85,7 @@ public:
   ThreadContextFactory(const ThreadContextFactory&) = delete;
   ThreadContextFactory& operator=(const ThreadContextFactory&) = delete;
   ~ThreadContextFactory() override;
-  ThreadContext* create_context(std::function<void()> code, smx_actor_t actor) override
+  ThreadContext* create_context(std::function<void()>&& code, actor::ActorImpl* actor) override
   {
     bool maestro = not code;
     return create_context(std::move(code), actor, maestro);
@@ -93,8 +93,11 @@ public:
   void run_all() override;
 
   // Optional methods:
-  ThreadContext* attach(smx_actor_t actor) override { return create_context(std::function<void()>(), actor, false); }
-  ThreadContext* create_maestro(std::function<void()> code, smx_actor_t actor) override
+  ThreadContext* attach(actor::ActorImpl* actor) override
+  {
+    return create_context(std::function<void()>(), actor, false);
+  }
+  ThreadContext* create_maestro(std::function<void()>&& code, actor::ActorImpl* actor) override
   {
     return create_context(std::move(code), actor, true);
   }
@@ -102,8 +105,10 @@ public:
 private:
   bool parallel_;
 
-  ThreadContext* create_context(std::function<void()> code, smx_actor_t actor, bool maestro);
+  ThreadContext* create_context(std::function<void()>&& code, actor::ActorImpl* actor, bool maestro);
 };
-}}} // namespace
+} // namespace context
+} // namespace kernel
+} // namespace simgrid
 
 #endif