Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
unify how threaded and parallelisable context factories find context_self
[simgrid.git] / src / kernel / context / Context.hpp
index 5c9de3e..0f4a2b0 100644 (file)
@@ -34,25 +34,27 @@ public:
   virtual Context* create_maestro(std::function<void()> code, smx_actor_t process);
 
   virtual void run_all() = 0;
-  virtual Context* self();
+  /** @brief Returns the current context of this thread. */
+  Context* self();
   std::string const& name() const { return name_; }
-private:
-  void declare_context(void* T, std::size_t size);
 
 protected:
   template <class T, class... Args> T* new_context(Args&&... args)
   {
     T* context = new T(std::forward<Args>(args)...);
-    this->declare_context(context, sizeof(T));
+    context->declare_context(sizeof(T));
     return context;
   }
 };
 
 class XBT_PUBLIC Context {
+  friend ContextFactory;
+
 private:
   std::function<void()> code_;
   void_pfn_smxprocess_t cleanup_func_ = nullptr;
   smx_actor_t actor_                  = nullptr;
+  void declare_context(std::size_t size);
 
 public:
   class StopRequest {
@@ -145,7 +147,6 @@ XBT_PRIVATE void *SIMIX_context_stack_new();
 XBT_PRIVATE void SIMIX_context_stack_delete(void *stack);
 
 XBT_PUBLIC void SIMIX_context_set_current(smx_context_t context);
-XBT_PRIVATE smx_context_t SIMIX_context_get_current();
 
 XBT_PUBLIC int SIMIX_process_get_maxpid();