From 603ac4da3c0a5fc303ba177c0205dda965109d5d Mon Sep 17 00:00:00 2001 From: Arnaud Giersch Date: Mon, 23 Nov 2020 16:03:27 +0100 Subject: [PATCH] More std::vector's. --- include/simgrid/kernel/routing/FloydZone.hpp | 8 +-- include/simgrid/kernel/routing/FullZone.hpp | 2 +- src/kernel/routing/FloydZone.cpp | 52 +++++--------------- src/kernel/routing/FullZone.cpp | 19 +++---- 4 files changed, 26 insertions(+), 55 deletions(-) diff --git a/include/simgrid/kernel/routing/FloydZone.hpp b/include/simgrid/kernel/routing/FloydZone.hpp index 9a57778a22..bdb79de509 100644 --- a/include/simgrid/kernel/routing/FloydZone.hpp +++ b/include/simgrid/kernel/routing/FloydZone.hpp @@ -35,9 +35,11 @@ public: private: /* vars to compute the Floyd algorithm. */ - int* predecessor_table_ = nullptr; - double* cost_table_ = nullptr; - RouteCreationArgs** link_table_ = nullptr; + std::vector predecessor_table_; + std::vector cost_table_; + std::vector link_table_; + + void init_tables(unsigned int table_size); }; } // namespace routing } // namespace kernel diff --git a/include/simgrid/kernel/routing/FullZone.hpp b/include/simgrid/kernel/routing/FullZone.hpp index 16631b4a3e..7dcb2d53af 100644 --- a/include/simgrid/kernel/routing/FullZone.hpp +++ b/include/simgrid/kernel/routing/FullZone.hpp @@ -31,7 +31,7 @@ public: std::vector& link_list, bool symmetrical) override; private: - RouteCreationArgs** routing_table_ = nullptr; + std::vector routing_table_; }; } // namespace routing } // namespace kernel diff --git a/src/kernel/routing/FloydZone.cpp b/src/kernel/routing/FloydZone.cpp index 34d9b203b7..c414f968e7 100644 --- a/src/kernel/routing/FloydZone.cpp +++ b/src/kernel/routing/FloydZone.cpp @@ -30,17 +30,19 @@ FloydZone::FloydZone(NetZoneImpl* father, const std::string& name, resource::Net FloydZone::~FloydZone() { - if (link_table_ == nullptr) // Dealing with a parse error in the file? - return; - unsigned int table_size = get_table_size(); /* Delete link_table */ - for (unsigned int i = 0; i < table_size; i++) - for (unsigned int j = 0; j < table_size; j++) - delete TO_FLOYD_LINK(i, j); - delete[] link_table_; + for (auto const* link : link_table_) + delete link; +} - delete[] predecessor_table_; - delete[] cost_table_; +void FloydZone::init_tables(unsigned int table_size) +{ + if (link_table_.empty()) { + /* Create and initialize Cost, Predecessor and Link tables */ + cost_table_.resize(table_size * table_size, DBL_MAX); /* link cost from host to host */ + predecessor_table_.resize(table_size * table_size, -1); /* predecessor host numbers */ + link_table_.resize(table_size * table_size, nullptr); /* actual link between src and dst */ + } } void FloydZone::get_local_route(NetPoint* src, NetPoint* dst, RouteCreationArgs* route, double* lat) @@ -89,24 +91,10 @@ void FloydZone::add_route(NetPoint* src, NetPoint* dst, NetPoint* gw_src, NetPoi { /* set the size of table routing */ unsigned int table_size = get_table_size(); + init_tables(table_size); add_route_check_params(src, dst, gw_src, gw_dst, link_list, symmetrical); - if (not link_table_) { - /* Create Cost, Predecessor and Link tables */ - cost_table_ = new double[table_size * table_size]; /* link cost from host to host */ - predecessor_table_ = new int[table_size * table_size]; /* predecessor host numbers */ - link_table_ = new RouteCreationArgs*[table_size * table_size]; /* actual link between src and dst */ - - /* Initialize costs and predecessors */ - for (unsigned int i = 0; i < table_size; i++) - for (unsigned int j = 0; j < table_size; j++) { - TO_FLOYD_COST(i, j) = DBL_MAX; - TO_FLOYD_PRED(i, j) = -1; - TO_FLOYD_LINK(i, j) = nullptr; - } - } - /* Check that the route does not already exist */ if (gw_dst) // netzone route (to adapt the error message, if any) xbt_assert(nullptr == TO_FLOYD_LINK(src->id(), dst->id()), @@ -155,21 +143,7 @@ void FloydZone::seal() { /* set the size of table routing */ unsigned int table_size = get_table_size(); - - if (not link_table_) { - /* Create Cost, Predecessor and Link tables */ - cost_table_ = new double[table_size * table_size]; /* link cost from host to host */ - predecessor_table_ = new int[table_size * table_size]; /* predecessor host numbers */ - link_table_ = new RouteCreationArgs*[table_size * table_size]; /* actual link between src and dst */ - - /* Initialize costs and predecessors */ - for (unsigned int i = 0; i < table_size; i++) - for (unsigned int j = 0; j < table_size; j++) { - TO_FLOYD_COST(i, j) = DBL_MAX; - TO_FLOYD_PRED(i, j) = -1; - TO_FLOYD_LINK(i, j) = nullptr; - } - } + init_tables(table_size); /* Add the loopback if needed */ if (network_model_->loopback_ && hierarchy_ == RoutingMode::base) { diff --git a/src/kernel/routing/FullZone.cpp b/src/kernel/routing/FullZone.cpp index 6c3bb86774..1defdac90a 100644 --- a/src/kernel/routing/FullZone.cpp +++ b/src/kernel/routing/FullZone.cpp @@ -26,8 +26,8 @@ void FullZone::seal() unsigned int table_size = get_table_size(); /* Create table if needed */ - if (not routing_table_) - routing_table_ = new RouteCreationArgs*[table_size * table_size](); + if (routing_table_.empty()) + routing_table_.resize(table_size * table_size, nullptr); /* Add the loopback if needed */ if (network_model_->loopback_ && hierarchy_ == RoutingMode::base) { @@ -44,14 +44,9 @@ void FullZone::seal() FullZone::~FullZone() { - if (routing_table_) { - unsigned int table_size = get_table_size(); - /* Delete routing table */ - for (unsigned int i = 0; i < table_size; i++) - for (unsigned int j = 0; j < table_size; j++) - delete TO_ROUTE_FULL(i, j); - delete[] routing_table_; - } + /* Delete routing table */ + for (auto const* route : routing_table_) + delete route; } void FullZone::get_local_route(NetPoint* src, NetPoint* dst, RouteCreationArgs* res, double* lat) @@ -79,8 +74,8 @@ void FullZone::add_route(NetPoint* src, NetPoint* dst, NetPoint* gw_src, NetPoin unsigned int table_size = get_table_size(); - if (not routing_table_) - routing_table_ = new RouteCreationArgs*[table_size * table_size](); + if (routing_table_.empty()) + routing_table_.resize(table_size * table_size, nullptr); /* Check that the route does not already exist */ if (gw_dst) // inter-zone route (to adapt the error message, if any) -- 2.20.1