From: Martin Quinson Date: Sun, 9 Jul 2023 23:45:54 +0000 (+0200) Subject: Convert 2 examples from Activity::wait_any to ActivitySet X-Git-Tag: v3.35~156 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/723804e75873240da8cfb1f03e6b73134ab7dde8 Convert 2 examples from Activity::wait_any to ActivitySet --- diff --git a/MANIFEST.in b/MANIFEST.in index e51cd443a7..9914133f80 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -120,10 +120,10 @@ include examples/c/plugin-host-load/plugin-host-load.c include examples/c/plugin-host-load/plugin-host-load.tesh include examples/c/synchro-semaphore/synchro-semaphore.c include examples/c/synchro-semaphore/synchro-semaphore.tesh -include examples/cpp/activity-testany/s4u-activity-testany.cpp -include examples/cpp/activity-testany/s4u-activity-testany.tesh -include examples/cpp/activity-waitany/s4u-activity-waitany.cpp -include examples/cpp/activity-waitany/s4u-activity-waitany.tesh +include examples/cpp/activityset-testany/s4u-activityset-testany.cpp +include examples/cpp/activityset-testany/s4u-activityset-testany.tesh +include examples/cpp/activityset-waitany/s4u-activityset-waitany.cpp +include examples/cpp/activityset-waitany/s4u-activityset-waitany.tesh include examples/cpp/actor-create/s4u-actor-create.cpp include examples/cpp/actor-create/s4u-actor-create.tesh include examples/cpp/actor-create/s4u-actor-create_d.xml diff --git a/examples/cpp/CMakeLists.txt b/examples/cpp/CMakeLists.txt index 66187a8b84..802f170d5b 100644 --- a/examples/cpp/CMakeLists.txt +++ b/examples/cpp/CMakeLists.txt @@ -153,7 +153,7 @@ endif() # Deal with each example -foreach (example activity-testany activity-waitany +foreach (example activityset-testany activityset-waitany actor-create actor-daemon actor-exiting actor-join actor-kill actor-lifetime actor-migrate actor-suspend actor-yield actor-stacksize app-bittorrent app-chainsend app-token-ring diff --git a/examples/cpp/activity-testany/s4u-activity-testany.cpp b/examples/cpp/activityset-testany/s4u-activityset-testany.cpp similarity index 68% rename from examples/cpp/activity-testany/s4u-activity-testany.cpp rename to examples/cpp/activityset-testany/s4u-activityset-testany.cpp index 55b273ffd6..8128c24755 100644 --- a/examples/cpp/activity-testany/s4u-activity-testany.cpp +++ b/examples/cpp/activityset-testany/s4u-activityset-testany.cpp @@ -22,26 +22,25 @@ static void bob() auto comm = mbox->get_async(&payload); auto io = disk->read_async(3e8); - std::vector pending_activities = {boost::dynamic_pointer_cast(exec), - boost::dynamic_pointer_cast(comm), - boost::dynamic_pointer_cast(io)}; + sg4::ActivitySet pending_activities; + pending_activities.push(exec); + pending_activities.push(comm); + pending_activities.push(io); XBT_INFO("Sleep_for a while"); sg4::this_actor::sleep_for(1); XBT_INFO("Test for completed activities"); while (not pending_activities.empty()) { - ssize_t changed_pos = sg4::Activity::test_any(pending_activities); - if (changed_pos != -1) { - auto* completed_one = pending_activities[changed_pos].get(); - if (dynamic_cast(completed_one)) + auto completed_one = pending_activities.test_any(); + if (completed_one != nullptr) { + if (boost::dynamic_pointer_cast(completed_one)) XBT_INFO("Completed a Comm"); - if (dynamic_cast(completed_one)) + if (boost::dynamic_pointer_cast(completed_one)) XBT_INFO("Completed an Exec"); - if (dynamic_cast(completed_one)) + if (boost::dynamic_pointer_cast(completed_one)) XBT_INFO("Completed an I/O"); - pending_activities.erase(pending_activities.begin() + changed_pos); - } else { // nothing matches, wait for a little bit + } else { XBT_INFO("Nothing matches, test again in 0.5s"); sg4::this_actor::sleep_for(.5); } diff --git a/examples/cpp/activity-testany/s4u-activity-testany.tesh b/examples/cpp/activityset-testany/s4u-activityset-testany.tesh similarity index 88% rename from examples/cpp/activity-testany/s4u-activity-testany.tesh rename to examples/cpp/activityset-testany/s4u-activityset-testany.tesh index ab4d8208b0..c590b36890 100644 --- a/examples/cpp/activity-testany/s4u-activity-testany.tesh +++ b/examples/cpp/activityset-testany/s4u-activityset-testany.tesh @@ -1,6 +1,6 @@ #!/usr/bin/env tesh -$ ${bindir:=.}/s4u-activity-testany ${platfdir}/hosts_with_disks.xml "--log=root.fmt:[%4.2r]%e[%5a]%e%m%n" +$ ${bindir:=.}/s4u-activityset-testany ${platfdir}/hosts_with_disks.xml "--log=root.fmt:[%4.2r]%e[%5a]%e%m%n" > [0.00] [alice] Send 'Message' > [0.00] [ bob] Create my asynchronous activities > [0.00] [ bob] Sleep_for a while diff --git a/examples/cpp/activity-waitany/s4u-activity-waitany.cpp b/examples/cpp/activityset-waitany/s4u-activityset-waitany.cpp similarity index 67% rename from examples/cpp/activity-waitany/s4u-activity-waitany.cpp rename to examples/cpp/activityset-waitany/s4u-activityset-waitany.cpp index c19c2e6d60..1878a13043 100644 --- a/examples/cpp/activity-waitany/s4u-activity-waitany.cpp +++ b/examples/cpp/activityset-waitany/s4u-activityset-waitany.cpp @@ -22,22 +22,20 @@ static void bob() auto comm = mbox->get_async(&payload); auto io = disk->read_async(3e8); - std::vector pending_activities = {boost::dynamic_pointer_cast(exec), - boost::dynamic_pointer_cast(comm), - boost::dynamic_pointer_cast(io)}; + sg4::ActivitySet pending_activities({boost::dynamic_pointer_cast(exec), + boost::dynamic_pointer_cast(comm), + boost::dynamic_pointer_cast(io)}); XBT_INFO("Wait for asynchrounous activities to complete"); while (not pending_activities.empty()) { - ssize_t changed_pos = sg4::Activity::wait_any(pending_activities); - if (changed_pos != -1) { - auto* completed_one = pending_activities[changed_pos].get(); - if (dynamic_cast(completed_one)) + auto completed_one = pending_activities.wait_any(); + if (completed_one != nullptr) { + if (boost::dynamic_pointer_cast(completed_one)) XBT_INFO("Completed a Comm"); - if (dynamic_cast(completed_one)) + if (boost::dynamic_pointer_cast(completed_one)) XBT_INFO("Completed an Exec"); - if (dynamic_cast(completed_one)) + if (boost::dynamic_pointer_cast(completed_one)) XBT_INFO("Completed an I/O"); - pending_activities.erase(pending_activities.begin() + changed_pos); } } XBT_INFO("Last activity is complete"); diff --git a/examples/cpp/activity-waitany/s4u-activity-waitany.tesh b/examples/cpp/activityset-waitany/s4u-activityset-waitany.tesh similarity index 75% rename from examples/cpp/activity-waitany/s4u-activity-waitany.tesh rename to examples/cpp/activityset-waitany/s4u-activityset-waitany.tesh index 7b15aa64cd..bc33cc46f1 100644 --- a/examples/cpp/activity-waitany/s4u-activity-waitany.tesh +++ b/examples/cpp/activityset-waitany/s4u-activityset-waitany.tesh @@ -1,6 +1,6 @@ #!/usr/bin/env tesh -$ ${bindir:=.}/s4u-activity-waitany ${platfdir}/hosts_with_disks.xml "--log=root.fmt:[%7.6r]%e[%5a]%e%m%n" +$ ${bindir:=.}/s4u-activityset-waitany ${platfdir}/hosts_with_disks.xml "--log=root.fmt:[%7.6r]%e[%5a]%e%m%n" > [0.000000] [alice] Send 'Message' > [0.000000] [ bob] Create my asynchronous activities > [0.000000] [ bob] Wait for asynchrounous activities to complete diff --git a/include/simgrid/s4u/ActivitySet.hpp b/include/simgrid/s4u/ActivitySet.hpp index 4add822a65..cf3cd4cbdc 100644 --- a/include/simgrid/s4u/ActivitySet.hpp +++ b/include/simgrid/s4u/ActivitySet.hpp @@ -25,6 +25,7 @@ class XBT_PUBLIC ActivitySet : public xbt::Extendable { public: ActivitySet() = default; + ActivitySet(const std::vector init) : activities_(init) {} ~ActivitySet() = default; /** Add an activity to the set */