xbt_dynar_free(&vertices_);
xbt_dynar_free(&upDownLinks);
xbt_free(name_);
- if (netcard_)
- delete netcard_;
+ delete netcard_;
+ }
+ void As::Seal()
+ {
+ sealed_ = true;
}
sg_platf_route_cbarg_t As::getBypassRoute(NetCard * /*src*/, NetCard * /*dst*/, double * /*lat*/) {
}
void As::addRoute(sg_platf_route_cbarg_t /*route*/){
- THROW_IMPOSSIBLE; /* No. */
+ xbt_die("AS %s does not accept new routes (wrong class).",name_);
}
void As::parseBypassroute(sg_platf_route_cbarg_t /*e_route*/){
- THROW_IMPOSSIBLE;
+ xbt_die("AS %s does not accept new bypass routes (wrong class).",name_);
}
}} // namespace simgrid::surf
};
/** @ingroup SURF_routing_interface
- * @brief The Autonomous System (AS) routing interface
+ * @brief Network Autonomous System (AS)
* @details [TODO]
*/
class As {
public:
As(const char*name);
/** @brief Close that AS: no more content can be added to it */
- virtual void Seal()=0;
+ virtual void Seal();
virtual ~As();
- char *name_ = nullptr;
- NetCard *netcard_ = nullptr;
- As *father_ = nullptr;
- xbt_dict_t sons_ = xbt_dict_new_homogeneous(NULL);
-
- xbt_dynar_t vertices_ = xbt_dynar_new(sizeof(char*),NULL); // our content, as known to our graph routing algorithm (maps vertexId -> vertex)
- xbt_dict_t bypassRoutes_ = nullptr;
e_surf_routing_hierarchy_t hierarchy_ = SURF_ROUTING_NULL;
xbt_dynar_t upDownLinks = xbt_dynar_new(sizeof(s_surf_parsing_link_up_down_t),NULL);
+ char *name_ = nullptr;
+ NetCard *netcard_ = nullptr; // Our representative in the father AS
+ As *father_ = nullptr;
+ xbt_dict_t sons_ = xbt_dict_new_homogeneous(NULL); // sub-ASes
+ xbt_dynar_t vertices_ = xbt_dynar_new(sizeof(char*),NULL); // our content, as known to our graph routing algorithm (maps vertexId -> vertex)
+private:
+ bool sealed_ = false; // We cannot add more content when sealed
+public:
/**
* @brief Probe the routing path between two points
*
class AsCluster: public AsNone {
public:
AsCluster(const char*name);
- void Seal() override {}; // nothing to do
virtual void getRouteAndLatency(NetCard *src, NetCard *dst, sg_platf_route_cbarg_t into, double *latency) override;
void getGraph(xbt_graph_t graph, xbt_dict_t nodes, xbt_dict_t edges) override;
routing_route_free(TO_FLOYD_LINK(i, j));
}
xbt_free(linkTable_);
- /* Delete bypass dict */
- xbt_dict_free(&bypassRoutes_);
/* Delete predecessor and cost table */
xbt_free(predecessorTable_);
xbt_free(costTable_);
AsGeneric::AsGeneric(const char*name)
: AsNone(name)
{
- bypassRoutes_ = xbt_dict_new_homogeneous((void (*)(void *)) routing_route_free);
}
AsGeneric::~AsGeneric()
protected:
void getRouteCheckParams(NetCard *src, NetCard *dst);
void addRouteCheckParams(sg_platf_route_cbarg_t route);
+private:
+ xbt_dict_t bypassRoutes_ = xbt_dict_new_homogeneous((void (*)(void *)) routing_route_free);
};
}
}
void AsNone::getRouteAndLatency(NetCard * /*src*/, NetCard * /*dst*/,
- sg_platf_route_cbarg_t /*res*/, double *lat)
-{
- *lat = 0.0;
-}
+ sg_platf_route_cbarg_t /*res*/, double */*lat*/)
+{}
void AsNone::getGraph(xbt_graph_t /*graph*/, xbt_dict_t /*nodes*/, xbt_dict_t /*edges*/)
{
class XBT_PRIVATE AsNone : public As {
public:
AsNone(const char*name);
- void Seal() override {}; // nothing to do
~AsNone();
void getRouteAndLatency(NetCard *src, NetCard *dst, sg_platf_route_cbarg_t into, double *latency) override;
class AsVivaldi: public AsGeneric {
public:
AsVivaldi(const char *name);
- void Seal() override {}; // nothing to do
~AsVivaldi() {};
void getRouteAndLatency(NetCard *src, NetCard *dst, sg_platf_route_cbarg_t into, double *latency) override;