std::map<std::string, s4u::Host*, std::less<>> hosts_;
std::map<std::string, resource::LinkImpl*, std::less<>> links_;
std::unordered_map<std::string, routing::NetPoint*> netpoints_;
+ std::unordered_map<std::string, activity::MailboxImpl*> mailboxes_;
+
std::unordered_map<std::string, actor::ActorCodeFactory> registered_functions; // Maps function names to actor code
actor::ActorCodeFactory default_function; // Function to use as a fallback when the provided name matches nothing
std::vector<resource::Model*> models_;
std::vector<xbt::Task<void()>> tasksTemp;
std::mutex mutex_;
+ static EngineImpl* instance_;
+
friend s4u::Engine;
public:
EngineImpl() = default;
+ /* Currently, only one instance is allowed to exist. This is why you can't copy or move it */
+#ifndef DOXYGEN
EngineImpl(const EngineImpl&) = delete;
EngineImpl& operator=(const EngineImpl&) = delete;
virtual ~EngineImpl();
+ static void shutdown();
+#endif
void load_deployment(const std::string& file) const;
void register_function(const std::string& name, const actor::ActorCodeFactory& code);
const std::vector<resource::Model*>& get_all_models() const { return models_; }
static EngineImpl* get_instance() { return simgrid::s4u::Engine::get_instance()->pimpl; }
+
actor::ActorCodeFactory get_function(const std::string& name)
{
auto res = registered_functions.find(name);
void add_actor_to_run_list_no_check(actor::ActorImpl* actor);
void add_actor_to_destroy_list(actor::ActorImpl& actor) { actors_to_destroy_.push_back(actor); }
- bool has_actors_to_run() { return not actors_to_run_.empty(); }
+ bool has_actors_to_run() const { return not actors_to_run_.empty(); }
const actor::ActorImpl* get_first_actor_to_run() const { return actors_to_run_.front(); }
const actor::ActorImpl* get_actor_to_run_at(unsigned long int i) const { return actors_to_run_[i]; }
unsigned long int get_actor_to_run_count() const { return actors_to_run_.size(); }