X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/fd10f21f197cb196350ffa8e7fe79c99ce38af42..fb75e2d8200e8fed10ed4436462fb73038a233ee:/src/surf/surf_routing.hpp diff --git a/src/surf/surf_routing.hpp b/src/surf/surf_routing.hpp index e4d93c6d0b..0980e57849 100644 --- a/src/surf/surf_routing.hpp +++ b/src/surf/surf_routing.hpp @@ -1,10 +1,16 @@ +/* Copyright (c) 2013-2014. 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. */ + #include "surf_interface.hpp" #include #ifndef NETWORK_ROUTING_HPP_ #define NETWORK_ROUTING_HPP_ -void routing_model_create( void *loopback); +XBT_PUBLIC(void) routing_model_create( void *loopback); /* ************************************************************************** */ /* ************************* GRAPH EXPORTING FUNCTIONS ********************** */ @@ -15,7 +21,7 @@ xbt_edge_t new_xbt_graph_edge (xbt_graph_t graph, xbt_node_t s, xbt_node_t d, xb * Classes * ***********/ -/* Note: As and RoutingEdge are declard as struct instead of class, to keep +/* Note: As and RoutingEdge are declared as struct instead of class, to keep compatibility with C files where they are mentioned. */ struct As; typedef As *AsPtr; @@ -23,9 +29,6 @@ typedef As *AsPtr; class RoutingModelDescription; typedef RoutingModelDescription *RoutingModelDescriptionPtr; -struct RoutingEdge; -typedef RoutingEdge *RoutingEdgePtr; - class Onelink; typedef Onelink *OnelinkPtr; @@ -61,7 +64,7 @@ public: }; /** - * @brief Get the route and latency between two RoutingEdgs + * @brief Get the route and latency between two RoutingEdges * @details [long description] * * @param src [description] @@ -91,13 +94,47 @@ public: */ struct RoutingEdge { public: - ~RoutingEdge() { xbt_free(p_name);}; + virtual ~RoutingEdge(){}; + virtual int getId()=0; + virtual int *getIdPtr()=0; + virtual void setId(int id)=0; + virtual char *getName()=0; + virtual AsPtr getRcComponent()=0; + virtual e_surf_network_element_type_t getRcType()=0; +}; + +struct RoutingEdgeImpl : public RoutingEdge { +public: + RoutingEdgeImpl(char *name, int id, e_surf_network_element_type_t rcType, AsPtr rcComponent) + : p_rcComponent(rcComponent), p_rcType(rcType), m_id(id), p_name(name) {} + ~RoutingEdgeImpl() { xbt_free(p_name);}; + + int getId() {return m_id;} + int *getIdPtr() {return &m_id;} + void setId(int id) {m_id = id;} + char *getName() {return p_name;} + AsPtr getRcComponent() {return p_rcComponent;} + e_surf_network_element_type_t getRcType() {return p_rcType;} +private: AsPtr p_rcComponent; e_surf_network_element_type_t p_rcType; int m_id; char *p_name; }; +struct RoutingEdgeWrapper : public RoutingEdge { +public: + RoutingEdgeWrapper(RoutingEdge *re) : p_re(re){} + ~RoutingEdgeWrapper(){} + int getId() {return p_re->getId();} + int *getIdPtr() {return p_re->getIdPtr();} + void setId(int id) {p_re->setId(id);} + char *getName() {return p_re->getName();} + AsPtr getRcComponent() {return p_re->getRcComponent();} + e_surf_network_element_type_t getRcType() {return p_re->getRcType();} +private: + RoutingEdge *p_re; +}; /** @ingroup SURF_routing_interface * @brief Link of lenght 1, alongside with its source and destination. This is mainly usefull in the bindings to gtnets and ns3 @@ -114,7 +151,7 @@ public: /** @ingroup SURF_routing_interface * @brief The class representing a whole routing platform */ -class RoutingPlatf { +XBT_PUBLIC_CLASS RoutingPlatf { public: ~RoutingPlatf(); AsPtr p_root;