Dynamical system model
Loading...
Searching...
No Matches
dsm::Street< Id, Size > Class Template Reference

The Street class represents a street in the network. More...

#include <Street.hpp>

Inheritance diagram for dsm::Street< Id, Size >:
dsm::SpireStreet< Id, Size >

Public Member Functions

 Street (Id id, const Street< Id, Size > &)
 Construct a new Street object starting from an existing street.
 
 Street (Id id, std::pair< Id, Id > nodePair)
 Construct a new Street object.
 
 Street (Id id, Size capacity, double len, std::pair< Id, Id > nodePair)
 Construct a new Street object.
 
 Street (Id id, Size capacity, double len, double maxSpeed, std::pair< Id, Id > nodePair)
 Construct a new Street object.
 
void setId (Id id)
 Set the street's id.
 
void setCapacity (Size capacity)
 Set the street's capacity.
 
void setTransportCapacity (Size capacity)
 Set the street's transport capacity.
 
void setLength (double len)
 Set the street's length.
 
void setQueue (dsm::queue< Size > queue)
 Set the street's queue.
 
void setNodePair (Id node1, Id node2)
 Set the street's node pair.
 
void setNodePair (const Node< Id, Size > &node1, const Node< Id, Size > &node2)
 Set the street's node pair.
 
void setNodePair (std::pair< Id, Id > pair)
 Set the street's node pair.
 
void setMaxSpeed (double speed)
 Set the street's speed limit.
 
void setAngle (std::pair< double, double > srcNode, std::pair< double, double > dstNode)
 Set the street's angle.
 
void setAngle (double angle)
 Set the street's angle.
 
Id id () const
 Get the street's id.
 
Size capacity () const
 Get the street's capacity.
 
Size transportCapacity () const
 Get the street's transport capacity.
 
double length () const
 Get the street's length.
 
const std::set< Id > & waitingAgents () const
 Get the street's waiting agents.
 
const dsm::queue< Size > & queue () const
 Get the street's queue.
 
const std::pair< Id, Id > & nodePair () const
 Get the street's node pair.
 
Size nAgents () const
 Get the number of agents on the street.
 
double density () const
 Get the street's density in $m^{-1}$.
 
double normDensity () const
 Get the street's normalized density.
 
bool isFull () const
 Check if the street is full.
 
double maxSpeed () const
 Get the street's speed limit.
 
double angle () const
 Get the street's angle.
 
virtual void addAgent (Id agentId)
 
void enqueue (Id agentId)
 Add an agent to the street's queue.
 
virtual std::optional< Id > dequeue ()
 Remove an agent from the street's queue.
 
virtual bool isSpire () const
 Check if the street is a spire.
 

Detailed Description

template<typename Id, typename Size>
requires (std::unsigned_integral<Id> && std::unsigned_integral<Size>)
class dsm::Street< Id, Size >

The Street class represents a street in the network.

Template Parameters
Id,Thetype of the street's id. It must be an unsigned integral type.
Size,Thetype of the street's capacity. It must be an unsigned integral type.

Constructor & Destructor Documentation

◆ Street() [1/4]

template<typename Id , typename Size >
requires (std::unsigned_integral<Id> && std::unsigned_integral<Size>)
dsm::Street< Id, Size >::Street ( Id id,
const Street< Id, Size > & street )

Construct a new Street object starting from an existing street.

The new street has different id but same capacity, length, speed limit, and node pair as the existing street.

Parameters
StreetThe existing street
idThe new street's id

◆ Street() [2/4]

template<typename Id , typename Size >
requires (std::unsigned_integral<Id> && std::unsigned_integral<Size>)
dsm::Street< Id, Size >::Street ( Id id,
std::pair< Id, Id > nodePair )

Construct a new Street object.

Parameters
idThe street's id
nodePairThe street's node pair

◆ Street() [3/4]

template<typename Id , typename Size >
requires (std::unsigned_integral<Id> && std::unsigned_integral<Size>)
dsm::Street< Id, Size >::Street ( Id id,
Size capacity,
double len,
std::pair< Id, Id > nodePair )

Construct a new Street object.

The default capacity is 1, the default length is 1, and the default speed limit is 50 km/h, i.e. 13.8888888889 m/s.

Parameters
idThe street's id
capacityThe street's capacity
lenThe street's length
nodePairThe street's node pair

◆ Street() [4/4]

template<typename Id , typename Size >
requires (std::unsigned_integral<Id> && std::unsigned_integral<Size>)
dsm::Street< Id, Size >::Street ( Id id,
Size capacity,
double len,
double maxSpeed,
std::pair< Id, Id > nodePair )

Construct a new Street object.

The default speed limit is 50 km/h, i.e. 13.8888888889 m/s.

Parameters
idThe street's id
capacityThe street's capacity
lenThe street's length
maxSpeedThe street's speed limit
nodePairThe street's node pair

Member Function Documentation

◆ addAgent()

template<typename Id , typename Size >
requires (std::unsigned_integral<Id> && std::unsigned_integral<Size>)
void dsm::Street< Id, Size >::addAgent ( Id agentId)
virtual

Reimplemented in dsm::SpireStreet< Id, Size >.

◆ angle()

template<typename Id , typename Size >
double dsm::Street< Id, Size >::angle ( ) const
inline

Get the street's angle.

Returns
double The street's angle

◆ capacity()

template<typename Id , typename Size >
Size dsm::Street< Id, Size >::capacity ( ) const
inline

Get the street's capacity.

Returns
Size, The street's capacity

◆ density()

template<typename Id , typename Size >
double dsm::Street< Id, Size >::density ( ) const
inline

Get the street's density in $m^{-1}$.

Returns
double, The street's density

◆ dequeue()

template<typename Id , typename Size >
requires (std::unsigned_integral<Id> && std::unsigned_integral<Size>)
std::optional< Id > dsm::Street< Id, Size >::dequeue ( )
virtual

Remove an agent from the street's queue.

Reimplemented in dsm::SpireStreet< Id, Size >.

◆ enqueue()

template<typename Id , typename Size >
requires (std::unsigned_integral<Id> && std::unsigned_integral<Size>)
void dsm::Street< Id, Size >::enqueue ( Id agentId)

Add an agent to the street's queue.

Parameters
agentIdThe id of the agent to add to the street's queue
Exceptions
std::runtime_errorIf the street's queue is full

◆ id()

template<typename Id , typename Size >
Id dsm::Street< Id, Size >::id ( ) const
inline

Get the street's id.

Returns
Id, The street's id

◆ isFull()

template<typename Id , typename Size >
bool dsm::Street< Id, Size >::isFull ( ) const
inline

Check if the street is full.

Returns
bool, True if the street is full, false otherwise

◆ isSpire()

template<typename Id , typename Size >
virtual bool dsm::Street< Id, Size >::isSpire ( ) const
inlinevirtual

Check if the street is a spire.

Returns
bool True if the street is a spire, false otherwise

Reimplemented in dsm::SpireStreet< Id, Size >.

◆ length()

template<typename Id , typename Size >
double dsm::Street< Id, Size >::length ( ) const
inline

Get the street's length.

Returns
double, The street's length

◆ maxSpeed()

template<typename Id , typename Size >
double dsm::Street< Id, Size >::maxSpeed ( ) const
inline

Get the street's speed limit.

Returns
double, The street's speed limit

◆ nAgents()

template<typename Id , typename Size >
Size dsm::Street< Id, Size >::nAgents ( ) const
inline

Get the number of agents on the street.

Returns
Size, The number of agents on the street

◆ nodePair()

template<typename Id , typename Size >
const std::pair< Id, Id > & dsm::Street< Id, Size >::nodePair ( ) const
inline

Get the street's node pair.

Returns
std::pair<Id, Id>, The street's node pair

◆ normDensity()

template<typename Id , typename Size >
double dsm::Street< Id, Size >::normDensity ( ) const
inline

Get the street's normalized density.

Returns
double, The street's normalized density

◆ queue()

template<typename Id , typename Size >
const dsm::queue< Size > & dsm::Street< Id, Size >::queue ( ) const
inline

Get the street's queue.

Returns
dsm::queue<Size>, The street's queue

◆ setAngle() [1/2]

template<typename Id , typename Size >
requires (std::unsigned_integral<Id> && std::unsigned_integral<Size>)
void dsm::Street< Id, Size >::setAngle ( double angle)

Set the street's angle.

Parameters
angleThe street's angle
Exceptions
std::invalid_argumentIf the angle is negative or greater than 2 * pi

◆ setAngle() [2/2]

template<typename Id , typename Size >
requires (std::unsigned_integral<Id> && std::unsigned_integral<Size>)
void dsm::Street< Id, Size >::setAngle ( std::pair< double, double > srcNode,
std::pair< double, double > dstNode )

Set the street's angle.

Parameters
srcNodeThe source node of the street
dstNodeThe destination node of the street

◆ setCapacity()

template<typename Id , typename Size >
void dsm::Street< Id, Size >::setCapacity ( Size capacity)
inline

Set the street's capacity.

Parameters
capacityThe street's capacity

◆ setId()

template<typename Id , typename Size >
void dsm::Street< Id, Size >::setId ( Id id)
inline

Set the street's id.

Parameters
idThe street's id

◆ setLength()

template<typename Id , typename Size >
requires (std::unsigned_integral<Id> && std::unsigned_integral<Size>)
void dsm::Street< Id, Size >::setLength ( double len)

Set the street's length.

Parameters
lenThe street's length
Exceptions
std::invalid_argument,Ifthe length is negative

◆ setMaxSpeed()

template<typename Id , typename Size >
requires (std::unsigned_integral<Id> && std::unsigned_integral<Size>)
void dsm::Street< Id, Size >::setMaxSpeed ( double speed)

Set the street's speed limit.

Parameters
speedThe street's speed limit
Exceptions
std::invalid_argument,Ifthe speed is negative

◆ setNodePair() [1/3]

template<typename Id , typename Size >
void dsm::Street< Id, Size >::setNodePair ( const Node< Id, Size > & node1,
const Node< Id, Size > & node2 )
inline

Set the street's node pair.

Parameters
node1The source node of the street
node2The destination node of the street

◆ setNodePair() [2/3]

template<typename Id , typename Size >
void dsm::Street< Id, Size >::setNodePair ( Id node1,
Id node2 )
inline

Set the street's node pair.

Parameters
node1The source node of the street
node2The destination node of the street

◆ setNodePair() [3/3]

template<typename Id , typename Size >
void dsm::Street< Id, Size >::setNodePair ( std::pair< Id, Id > pair)
inline

Set the street's node pair.

Parameters
pairThe street's node pair

◆ setQueue()

template<typename Id , typename Size >
void dsm::Street< Id, Size >::setQueue ( dsm::queue< Size > queue)
inline

Set the street's queue.

Parameters
queueThe street's queue

◆ setTransportCapacity()

template<typename Id , typename Size >
void dsm::Street< Id, Size >::setTransportCapacity ( Size capacity)
inline

Set the street's transport capacity.

The transport capacity is the maximum number of agents that can traverse the street in a time step.

Parameters
capacityThe street's transport capacity

◆ transportCapacity()

template<typename Id , typename Size >
Size dsm::Street< Id, Size >::transportCapacity ( ) const
inline

Get the street's transport capacity.

The transport capacity is the maximum number of agents that can traverse the street in a time step.

Returns
Size, The street's transport capacity

◆ waitingAgents()

template<typename Id , typename Size >
const std::set< Id > & dsm::Street< Id, Size >::waitingAgents ( ) const
inline

Get the street's waiting agents.

Returns
std::set<Id>, The street's waiting agents

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