From f94165f07b3250944bb7174ca6ac8085b67d7963 Mon Sep 17 00:00:00 2001 From: Martin Quinson Date: Sun, 31 Jan 2016 00:04:15 +0100 Subject: [PATCH] [trace_mgr] less void*, (some) more doc --- include/simgrid/forward.h | 10 +++++--- src/surf/surf_c_bindings.cpp | 13 +++++------ src/surf/trace_mgr.cpp | 12 ++++------ src/surf/trace_mgr.hpp | 9 +++----- teshsuite/surf/trace_usage/trace_usage.cpp | 27 ++++++++++++++-------- 5 files changed, 39 insertions(+), 32 deletions(-) diff --git a/include/simgrid/forward.h b/include/simgrid/forward.h index b910d90c4f..ecab7aa6f9 100644 --- a/include/simgrid/forward.h +++ b/include/simgrid/forward.h @@ -16,6 +16,7 @@ namespace simgrid { class Host; } namespace surf { + class Resource; class Cpu; class NetCard; class As; @@ -27,26 +28,29 @@ namespace simgrid { } typedef simgrid::s4u::Host simgrid_Host; +typedef simgrid::surf::As surf_As; typedef simgrid::surf::Cpu surf_Cpu; typedef simgrid::surf::NetCard surf_NetCard; -typedef simgrid::surf::As surf_As; typedef simgrid::surf::Link Link; +typedef simgrid::surf::Resource surf_Resource; typedef simgrid::trace_mgr::future_evt_set sg_future_evt_set; #else typedef struct simgrid_Host simgrid_Host; +typedef struct surf_As surf_As; typedef struct surf_Cpu surf_Cpu; typedef struct surf_NetCard surf_NetCard; -typedef struct surf_As surf_As; +typedef struct surf_Resource surf_Resource; typedef struct Link Link; typedef struct future_evt_set sg_future_evt_set; #endif typedef simgrid_Host* sg_host_t; +typedef surf_As *AS_t; typedef surf_Cpu *surf_cpu_t; typedef surf_NetCard *sg_netcard_t; -typedef surf_As *AS_t; +typedef surf_Resource *sg_resource_t; typedef sg_future_evt_set *sg_future_evt_set_t; // Types which are in fact dictelmt: diff --git a/src/surf/surf_c_bindings.cpp b/src/surf/surf_c_bindings.cpp index ce621b9630..84270bd9ea 100644 --- a/src/surf/surf_c_bindings.cpp +++ b/src/surf/surf_c_bindings.cpp @@ -41,9 +41,8 @@ void surf_presolve(void) while ((next_event_date = future_evt_set->next_date()) != -1.0) { if (next_event_date > NOW) break; - while ((event = future_evt_set->pop_leq(next_event_date, - &value, - (void **) &resource))) { + + while ((event = future_evt_set->pop_leq(next_event_date, &value, &resource))) { if (value >= 0){ resource->updateState(event, value, NOW); } @@ -116,12 +115,12 @@ double surf_solve(double max_date) break; } - if ((surf_min == -1.0) || (next_event_date > NOW + surf_min)) break; + if ((surf_min == -1.0) || (next_event_date > NOW + surf_min)) + break; XBT_DEBUG("Updating models (min = %g, NOW = %g, next_event_date = %g)", surf_min, NOW, next_event_date); - while ((event = future_evt_set->pop_leq(next_event_date, - &value, - (void **) &resource))) { + + while ((event = future_evt_set->pop_leq(next_event_date, &value, &resource))) { if (resource->isUsed() || xbt_dict_get_or_null(watched_hosts_lib, resource->getName())) { surf_min = next_event_date - NOW; XBT_DEBUG diff --git a/src/surf/trace_mgr.cpp b/src/surf/trace_mgr.cpp index 4726680d24..d6839e3a93 100644 --- a/src/surf/trace_mgr.cpp +++ b/src/surf/trace_mgr.cpp @@ -369,11 +369,9 @@ void tmgr_trace_free(tmgr_trace_t trace) free(trace); } -/** Register a new trace into the future event set, and get an iterator over the integrated trace */ +/** @brief Registers a new trace into the future event set, and get an iterator over the integrated trace */ tmgr_trace_iterator_t simgrid::trace_mgr::future_evt_set::add_trace( - tmgr_trace_t trace, - double start_time, - void *resource) + tmgr_trace_t trace, double start_time, surf::Resource *resource) { tmgr_trace_iterator_t trace_iterator = NULL; @@ -392,6 +390,7 @@ tmgr_trace_iterator_t simgrid::trace_mgr::future_evt_set::add_trace( return trace_iterator; } +/** @brief returns the date of the next occurring event (pure function) */ double simgrid::trace_mgr::future_evt_set::next_date() { if (xbt_heap_size(p_heap)) @@ -400,10 +399,9 @@ double simgrid::trace_mgr::future_evt_set::next_date() return -1.0; } +/** @brief Retrieves the next occurring event, or NULL if none happens before #date */ tmgr_trace_iterator_t simgrid::trace_mgr::future_evt_set::pop_leq( - double date, - double *value, - void** resource) + double date, double *value, simgrid::surf::Resource **resource) { double event_date = next_date(); tmgr_trace_iterator_t trace_iterator = NULL; diff --git a/src/surf/trace_mgr.hpp b/src/surf/trace_mgr.hpp index d4115ab681..d6c67973b3 100644 --- a/src/surf/trace_mgr.hpp +++ b/src/surf/trace_mgr.hpp @@ -71,7 +71,7 @@ typedef struct tmgr_trace { typedef struct tmgr_trace_iterator { tmgr_trace_t trace; unsigned int idx; - void *resource; + sg_resource_t resource; int free_me; } s_tmgr_trace_event_t; @@ -104,11 +104,8 @@ public: future_evt_set(); virtual ~future_evt_set(); double next_date(); - tmgr_trace_iterator_t pop_leq(double date, double *value, void** resource); - tmgr_trace_iterator_t add_trace( - tmgr_trace_t trace, - double start_time, - void *model); + tmgr_trace_iterator_t pop_leq(double date, double *value, simgrid::surf::Resource** resource); + tmgr_trace_iterator_t add_trace(tmgr_trace_t trace, double start_time, simgrid::surf::Resource *resource); private: // TODO: use a boost type for the heap (or a ladder queue) diff --git a/teshsuite/surf/trace_usage/trace_usage.cpp b/teshsuite/surf/trace_usage/trace_usage.cpp index 3cb5899082..d04fecfded 100644 --- a/teshsuite/surf/trace_usage/trace_usage.cpp +++ b/teshsuite/surf/trace_usage/trace_usage.cpp @@ -13,11 +13,20 @@ #include #include #include +#include "src/surf/network_cm02.hpp" #include "src/surf/trace_mgr.hpp" XBT_LOG_NEW_DEFAULT_CATEGORY(surf_test, "Messages specific for surf example"); +class DummyTestResource + : public simgrid::surf::Resource { +public: + DummyTestResource(const char *name) : Resource(nullptr,name) {} + bool isUsed() override {return false;} + void updateState(tmgr_trace_iterator_t it, double date, double value) {} +}; + static void test(void) { simgrid::trace_mgr::future_evt_set *fes = new simgrid::trace_mgr::future_evt_set(); @@ -25,25 +34,25 @@ static void test(void) tmgr_trace_t trace_B = tmgr_trace_new_from_file("trace_B.txt"); double next_event_date = -1.0; double value = -1.0; - char *resource = NULL; - char *host_A = strdup("Host A"); - char *host_B = strdup("Host B"); + simgrid::surf::Resource *resource = NULL; + simgrid::surf::Resource *hostA = new DummyTestResource("Host A"); + simgrid::surf::Resource *hostB = new DummyTestResource("Host B"); - fes->add_trace(trace_A, 1.0, host_A); - fes->add_trace(trace_B, 0.0, host_B); + fes->add_trace(trace_A, 1.0, hostA); + fes->add_trace(trace_B, 0.0, hostB); while ((next_event_date = fes->next_date()) != -1.0) { XBT_DEBUG("%g" " : \n", next_event_date); - while (fes->pop_leq(next_event_date, &value, (void **) &resource)) { - XBT_DEBUG("\t %s : " "%g" "\n", resource, value); + while (fes->pop_leq(next_event_date, &value, &resource)) { + XBT_DEBUG("\t %s : " "%g" "\n", resource->getName(), value); } if (next_event_date > 1000) break; } delete fes; - free(host_B); - free(host_A); + delete hostA; + delete hostB; } int main(int argc, char **argv) -- 2.20.1