X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/173e6cb373d42d61f6eb620771dc5a2e5492173b..84402e8e2ee2a2d0bef25fdceb0a263ed8b471f6:/src/s4u/s4u_Actor.cpp diff --git a/src/s4u/s4u_Actor.cpp b/src/s4u/s4u_Actor.cpp index 0ac6454070..a23ed083b6 100644 --- a/src/s4u/s4u_Actor.cpp +++ b/src/s4u/s4u_Actor.cpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2006-2019. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2006-2020. 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. */ @@ -70,15 +70,15 @@ ActorPtr Actor::create(const std::string& name, s4u::Host* host, const std::func ActorPtr Actor::create(const std::string& name, s4u::Host* host, const std::string& function, std::vector args) { - simix::ActorCodeFactory& factory = SIMIX_get_actor_code_factory(function); + const simix::ActorCodeFactory& factory = SIMIX_get_actor_code_factory(function); return create(name, host, factory(std::move(args))); } -void intrusive_ptr_add_ref(Actor* actor) +void intrusive_ptr_add_ref(const Actor* actor) { intrusive_ptr_add_ref(actor->pimpl_); } -void intrusive_ptr_release(Actor* actor) +void intrusive_ptr_release(const Actor* actor) { intrusive_ptr_release(actor->pimpl_); } @@ -138,7 +138,7 @@ void Actor::set_host(Host* new_host) s4u::Actor::on_migration_start(*this); } - auto* previous_location = get_host(); + const s4u::Host* previous_location = get_host(); kernel::actor::simcall([this, new_host]() { if (pimpl_->waiting_synchro != nullptr) { @@ -345,11 +345,22 @@ void execute(double flops, double priority) void parallel_execute(const std::vector& hosts, const std::vector& flops_amounts, const std::vector& bytes_amounts) { - parallel_execute(hosts, flops_amounts, bytes_amounts, -1); + exec_init(hosts, flops_amounts, bytes_amounts)->wait(); } void parallel_execute(const std::vector& hosts, const std::vector& flops_amounts, - const std::vector& bytes_amounts, double timeout) + const std::vector& bytes_amounts, double timeout) // XBT_ATTRIB_DEPRECATED_v329 +{ + exec_init(hosts, flops_amounts, bytes_amounts)->wait_for(timeout); +} + +ExecPtr exec_init(double flops_amount) +{ + return ExecPtr(new ExecSeq(get_host(), flops_amount)); +} + +ExecPtr exec_init(const std::vector& hosts, const std::vector& flops_amounts, + const std::vector& bytes_amounts) { xbt_assert(hosts.size() > 0, "Your parallel executions must span over at least one host."); xbt_assert(hosts.size() == flops_amounts.size() || flops_amounts.empty(), @@ -371,17 +382,6 @@ void parallel_execute(const std::vector& hosts, const std::vectorset_timeout(timeout)->wait(); -} - -ExecPtr exec_init(double flops_amount) -{ - return ExecPtr(new ExecSeq(get_host(), flops_amount)); -} - -ExecPtr exec_init(const std::vector& hosts, const std::vector& flops_amounts, - const std::vector& bytes_amounts) -{ return ExecPtr(new ExecPar(hosts, flops_amounts, bytes_amounts)); } @@ -479,7 +479,7 @@ void sg_actor_start(sg_actor_t actor, xbt_main_func_t code, int argc, char** arg * * This function checks whether @a actor is a valid pointer and return its PID (or 0 in case of problem). */ -aid_t sg_actor_get_PID(sg_actor_t actor) +aid_t sg_actor_get_PID(const_sg_actor_t actor) { /* Do not raise an exception here: this function is called by the logs * and the exceptions, so it would be called back again and again */ @@ -494,7 +494,7 @@ aid_t sg_actor_get_PID(sg_actor_t actor) * This function checks whether @a actor is a valid pointer and return its parent's PID. * Returns -1 if the actor has not been created by any other actor. */ -aid_t sg_actor_get_PPID(sg_actor_t actor) +aid_t sg_actor_get_PPID(const_sg_actor_t actor) { return actor->get_ppid(); } @@ -515,12 +515,12 @@ sg_actor_t sg_actor_by_PID(aid_t pid) /** @ingroup m_actor_management * @brief Return the name of an actor. */ -const char* sg_actor_get_name(sg_actor_t actor) +const char* sg_actor_get_name(const_sg_actor_t actor) { return actor->get_cname(); } -sg_host_t sg_actor_get_host(sg_actor_t actor) +sg_host_t sg_actor_get_host(const_sg_actor_t actor) { return actor->get_host(); } @@ -532,7 +532,7 @@ sg_host_t sg_actor_get_host(sg_actor_t actor) * @param name a property name * @return value of a property (or nullptr if the property is not set) */ -const char* sg_actor_get_property_value(sg_actor_t actor, const char* name) +const char* sg_actor_get_property_value(const_sg_actor_t actor, const char* name) { return actor->get_property(name); } @@ -542,7 +542,7 @@ const char* sg_actor_get_property_value(sg_actor_t actor, const char* name) * * This function returns all the parameters associated with an actor */ -xbt_dict_t sg_actor_get_properties(sg_actor_t actor) +xbt_dict_t sg_actor_get_properties(const_sg_actor_t actor) { xbt_assert(actor != nullptr, "Invalid parameter: First argument must not be nullptr"); xbt_dict_t as_dict = xbt_dict_new_homogeneous(xbt_free_f); @@ -735,12 +735,12 @@ void sg_actor_self_execute(double flops) } /** @brief Take an extra reference on that actor to prevent it to be garbage-collected */ -void sg_actor_ref(sg_actor_t actor) +void sg_actor_ref(const_sg_actor_t actor) { intrusive_ptr_add_ref(actor); } /** @brief Release a reference on that actor so that it can get be garbage-collected */ -void sg_actor_unref(sg_actor_t actor) +void sg_actor_unref(const_sg_actor_t actor) { intrusive_ptr_release(actor); }