Dynamical system model
Loading...
Searching...
No Matches
dsm::Network< node_t, edge_t > Class Template Reference

Public Member Functions

 Network (AdjacencyMatrix const &adj)
 Construct a new Network object.
 
AdjacencyMatrix const & adjacencyMatrix () const
 Get the adjacency matrix.
 
std::unordered_map< Id, std::unique_ptr< node_t > > const & nodes () const
 Get the nodes as an unordered map.
 
std::unordered_map< Id, std::unique_ptr< edge_t > > const & edges () const
 Get the edges as an unordered map.
 
size_t nNodes () const
 Get the number of nodes.
 
size_t nEdges () const
 Get the number of edges.
 
template<typename TNode = node_t, typename... TArgs>
requires (std::is_base_of_v<node_t, TNode> && std::constructible_from<TNode, Id, TArgs...>)
void addNode (Id nodeId, TArgs &&... args)
 Add a node to the network.
 
template<typename TEdge = edge_t, typename... TArgs>
requires (std::is_base_of_v<edge_t, TEdge> && std::constructible_from<TEdge, Id, TArgs...>)
void addEdge (Id edgeId, TArgs &&... args)
 Add an edge to the network.
 
std::unique_ptr< node_t > const & node (Id nodeId) const
 Get a node by id.
 
std::unique_ptr< edge_t > const & edge (Id edgeId) const
 Get an edge by id.
 
template<typename TNode>
requires (std::is_base_of_v<node_t, TNode>)
TNode & node (Id nodeId)
 Get a node by id.
 
template<typename TEdge>
requires (std::is_base_of_v<edge_t, TEdge>)
TEdge & edge (Id edgeId)
 Get an edge by id.
 

Protected Member Functions

virtual void m_addMissingNodes (Id const edgeId)
 

Protected Attributes

AdjacencyMatrix m_adjacencyMatrix
 
std::unordered_map< Id, std::unique_ptr< node_t > > m_nodes
 
std::unordered_map< Id, std::unique_ptr< edge_t > > m_edges
 

Constructor & Destructor Documentation

◆ Network()

template<typename node_t, typename edge_t>
requires (std::is_base_of_v<Node, node_t> && std::is_base_of_v<Edge, edge_t>)
dsm::Network< node_t, edge_t >::Network ( AdjacencyMatrix const & adj)
explicit

Construct a new Network object.

Parameters
adjThe adjacency matrix representing the network

Member Function Documentation

◆ addEdge()

template<typename node_t, typename edge_t>
requires (std::is_base_of_v<edge_t, TEdge> && std::constructible_from<TEdge, Id, TArgs...>)
template<typename TEdge, typename... TArgs>
requires (std::is_base_of_v<edge_t, TEdge> && std::constructible_from<TEdge, Id, TArgs...>)
void dsm::Network< node_t, edge_t >::addEdge ( Id edgeId,
TArgs &&... args )

Add an edge to the network.

Template Parameters
TEdgeThe type of the edge (default is edge_t)
TArgsThe types of the arguments
Parameters
edgeIdThe edge's id
argsThe arguments to pass to the edge's constructor

◆ addNode()

template<typename node_t, typename edge_t>
requires (std::is_base_of_v<node_t, TNode> && std::constructible_from<TNode, Id, TArgs...>)
template<typename TNode, typename... TArgs>
requires (std::is_base_of_v<node_t, TNode> && std::constructible_from<TNode, Id, TArgs...>)
void dsm::Network< node_t, edge_t >::addNode ( Id nodeId,
TArgs &&... args )

Add a node to the network.

Template Parameters
TNodeThe type of the node (default is node_t)
TArgsThe types of the arguments
Parameters
nodeIdThe node's id
argsThe arguments to pass to the node's constructor

◆ adjacencyMatrix()

template<typename node_t, typename edge_t>
requires (std::is_base_of_v<Node, node_t> && std::is_base_of_v<Edge, edge_t>)
AdjacencyMatrix const & dsm::Network< node_t, edge_t >::adjacencyMatrix ( ) const

Get the adjacency matrix.

Returns
AdjacencyMatrix The adjacency matrix

◆ edge() [1/2]

template<typename node_t, typename edge_t>
requires (std::is_base_of_v<edge_t, TEdge>)
template<typename TEdge>
requires (std::is_base_of_v<edge_t, TEdge>)
TEdge & dsm::Network< node_t, edge_t >::edge ( Id edgeId)

Get an edge by id.

Template Parameters
TEdgeThe type of the edge
Parameters
edgeIdThe edge's id
Returns
TEdge& A reference to the edge

◆ edge() [2/2]

template<typename node_t, typename edge_t>
requires (std::is_base_of_v<Node, node_t> && std::is_base_of_v<Edge, edge_t>)
std::unique_ptr< edge_t > const & dsm::Network< node_t, edge_t >::edge ( Id edgeId) const

Get an edge by id.

Parameters
edgeIdThe edge's id
Returns
std::unique_ptr<edge_t> const& A const reference to the edge

◆ edges()

template<typename node_t, typename edge_t>
requires (std::is_base_of_v<Node, node_t> && std::is_base_of_v<Edge, edge_t>)
std::unordered_map< Id, std::unique_ptr< edge_t > > const & dsm::Network< node_t, edge_t >::edges ( ) const

Get the edges as an unordered map.

Returns
std::unordered_map<Id, std::unique_ptr<edge_t>> The edges

◆ nEdges()

template<typename node_t, typename edge_t>
requires (std::is_base_of_v<Node, node_t> && std::is_base_of_v<Edge, edge_t>)
size_t dsm::Network< node_t, edge_t >::nEdges ( ) const

Get the number of edges.

Returns
size_t The number of edges

◆ nNodes()

template<typename node_t, typename edge_t>
requires (std::is_base_of_v<Node, node_t> && std::is_base_of_v<Edge, edge_t>)
size_t dsm::Network< node_t, edge_t >::nNodes ( ) const

Get the number of nodes.

Returns
size_t The number of nodes

◆ node() [1/2]

template<typename node_t, typename edge_t>
requires (std::is_base_of_v<node_t, TNode>)
template<typename TNode>
requires (std::is_base_of_v<node_t, TNode>)
TNode & dsm::Network< node_t, edge_t >::node ( Id nodeId)

Get a node by id.

Template Parameters
TNodeThe type of the node
Parameters
nodeIdThe node's id
Returns
TNode& A reference to the node

◆ node() [2/2]

template<typename node_t, typename edge_t>
requires (std::is_base_of_v<Node, node_t> && std::is_base_of_v<Edge, edge_t>)
std::unique_ptr< node_t > const & dsm::Network< node_t, edge_t >::node ( Id nodeId) const

Get a node by id.

Parameters
nodeIdThe node's id
Returns
std::unique_ptr<node_t> const& A const reference to the node

◆ nodes()

template<typename node_t, typename edge_t>
requires (std::is_base_of_v<Node, node_t> && std::is_base_of_v<Edge, edge_t>)
std::unordered_map< Id, std::unique_ptr< node_t > > const & dsm::Network< node_t, edge_t >::nodes ( ) const

Get the nodes as an unordered map.

Returns
std::unordered_map<Id, std::unique_ptr<node_t>> The nodes

The documentation for this class was generated from the following file: