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

Public Member Functions

 Network ()=default
 Construct a new empty Network object.
 
 Network (AdjacencyMatrix const &adj)
 Construct a new Network object.
 
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, TArgs...>)
void addNode (TArgs &&... args)
 Add a node to the network.
 
template<typename TNode = node_t>
requires (std::is_base_of_v<node_t, TNode>)
void addNDefaultNodes (size_t n)
 
template<typename TEdge = edge_t, typename... TArgs>
requires (std::is_base_of_v<edge_t, TEdge> && std::constructible_from<TEdge, TArgs...>)
void addEdge (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< node_t > & node (Id nodeId)
 Get a node by id.
 
std::unique_ptr< edge_t > const & edge (Id edgeId) const
 Get an edge by id.
 
std::unique_ptr< edge_t > & edge (Id edgeId)
 Get an edge by id.
 
std::unique_ptr< edge_t > const & edge (Id source, Id target) const
 
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

Id m_cantorHash (Id u, Id v) const
 
Id m_cantorHash (std::pair< Id, Id > const &idPair) const
 

Protected Attributes

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>)
dsf::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, TArgs...>)
template<typename TEdge, typename... TArgs>
requires (std::is_base_of_v<edge_t, TEdge> && std::constructible_from<TEdge, TArgs...>)
void dsf::Network< node_t, edge_t >::addEdge ( 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, TArgs...>)
template<typename TNode, typename... TArgs>
requires (std::is_base_of_v<node_t, TNode> && std::constructible_from<TNode, TArgs...>)
void dsf::Network< node_t, edge_t >::addNode ( 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

◆ edge() [1/3]

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 > & dsf::Network< node_t, edge_t >::edge ( Id edgeId)

Get an edge by id.

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

◆ edge() [2/3]

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 & dsf::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() [3/3]

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 & dsf::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 & dsf::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 dsf::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 dsf::Network< node_t, edge_t >::nNodes ( ) const

Get the number of nodes.

Returns
size_t The number of nodes

◆ node() [1/3]

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 > & dsf::Network< node_t, edge_t >::node ( Id nodeId)

Get a node by id.

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

◆ node() [2/3]

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 & dsf::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() [3/3]

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 & dsf::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 & dsf::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: