Orocos Real-Time Toolkit
2.6.0
|
Manages connections between ports. More...
#include <rtt/internal/ConnectionManager.hpp>
Public Types | |
typedef boost::tuple < boost::shared_ptr< ConnID > , base::ChannelElementBase::shared_ptr, ConnPolicy > | ChannelDescriptor |
A Channel (= connection) is described by an opaque ConnID object, the first element of the channel and the policy of the channel. | |
Public Member Functions | |
ConnectionManager (base::PortInterface *port) | |
Creates a connection manager to manage the connections of port. | |
void | addConnection (ConnID *port_id, base::ChannelElementBase::shared_ptr channel_input, ConnPolicy policy) |
Helper method for port-to-port connection establishment. | |
bool | removeConnection (ConnID *port_id) |
void | disconnect () |
Disconnect all connections. | |
bool | connected () const |
Returns true if there is at least one channel registered in this port's list of outputs. | |
bool | disconnect (base::PortInterface *port) |
Removes the channel that connects this port to port . | |
template<typename Pred > | |
bool | delete_if (Pred pred) |
template<typename Pred > | |
void | select_reader_channel (Pred pred, bool copy_old_data) |
Selects a connection as the current channel if pred(connection) is true. | |
template<typename Pred > | |
std::pair< bool, ChannelDescriptor > | find_if (Pred pred, bool copy_old_data) |
bool | isSingleConnection () const |
Returns true if this manager manages only one connection. | |
base::ChannelElementBase * | getCurrentChannel () const |
Returns the first added channel or if select_if was called, the selected channel. | |
std::list< ChannelDescriptor > | getChannels () const |
Returns a list of all channels managed by this object. | |
void | clear () |
Clears (removes) all data in the manager's connections. | |
Protected Member Functions | |
void | updateCurrentChannel (bool reset_current) |
bool | findMatchingPort (ConnID const *conn_id, ChannelDescriptor const &descriptor) |
Helper method for disconnect(PortInterface*) | |
bool | eraseConnection (ChannelDescriptor &descriptor) |
Helper method for disconnect() | |
Protected Attributes | |
os::Mutex | connection_resize_mtx |
os::Mutex for when it is needed to resize the connections list | |
base::PortInterface * | mport |
The port for which we manage connections. | |
std::list< ChannelDescriptor > | connections |
A list of all our connections. | |
ChannelDescriptor | cur_channel |
Optimisation in case only one channel is to be managed. | |
RTT::os::Mutex | connection_lock |
Lock that should be taken before the list of connections is accessed or modified. |
Manages connections between ports.
This class is used for input and output ports in order to manage their channels. TODO: use the mutex lock !!!
Definition at line 77 of file ConnectionManager.hpp.
typedef boost::tuple<boost::shared_ptr<ConnID>, base::ChannelElementBase::shared_ptr, ConnPolicy> RTT::internal::ConnectionManager::ChannelDescriptor |
A Channel (= connection) is described by an opaque ConnID object, the first element of the channel and the policy of the channel.
The policy is only given for read-only access, modifying it will not have any effect on the connection.
Definition at line 86 of file ConnectionManager.hpp.
Creates a connection manager to manage the connections of port.
port | The port whose connections to manage. |
Definition at line 61 of file ConnectionManager.cpp.
void RTT::internal::ConnectionManager::addConnection | ( | ConnID * | port_id, |
base::ChannelElementBase::shared_ptr | channel_input, | ||
ConnPolicy | policy | ||
) |
Helper method for port-to-port connection establishment.
This is the last step in adding a connection to an output port and also validates if the connection is sound.
Definition at line 129 of file ConnectionManager.cpp.
References connection_lock, connections, and cur_channel.
Referenced by RTT::base::OutputPortInterface::addConnection(), and RTT::base::InputPortInterface::addConnection().
Clears (removes) all data in the manager's connections.
After this call, all channels will return NoData, until new data is written.
Definition at line 79 of file ConnectionManager.cpp.
References RTT::internal::clearChannel(), connection_lock, and connections.
Referenced by RTT::base::InputPortInterface::clear().
bool RTT::internal::ConnectionManager::eraseConnection | ( | ConnectionManager::ChannelDescriptor & | descriptor | ) | [protected] |
Helper method for disconnect()
Unconditionally removes the given connection and return true
Definition at line 103 of file ConnectionManager.cpp.
References disconnect(), and mport.
Referenced by disconnect().
bool RTT::internal::ConnectionManager::findMatchingPort | ( | ConnID const * | conn_id, |
ChannelDescriptor const & | descriptor | ||
) | [protected] |
Helper method for disconnect(PortInterface*)
This method removes the channel listed in descriptor
from the list of output channels if port
has the same id that the one listed in descriptor
.
Definition at line 84 of file ConnectionManager.cpp.
base::ChannelElementBase* RTT::internal::ConnectionManager::getCurrentChannel | ( | ) | const [inline] |
Returns the first added channel or if select_if was called, the selected channel.
Definition at line 185 of file ConnectionManager.hpp.
Referenced by RTT::InputPort< T >::getDataSample().
bool RTT::internal::ConnectionManager::isSingleConnection | ( | ) | const [inline] |
Returns true if this manager manages only one connection.
Definition at line 178 of file ConnectionManager.hpp.
void RTT::internal::ConnectionManager::select_reader_channel | ( | Pred | pred, |
bool | copy_old_data | ||
) | [inline] |
Selects a connection as the current channel if pred(connection) is true.
It will first check the current channel ( getCurrentChannel() ), if that does not satisfy pred, iterate over all connections. If none satisfy pred, the current channel remains unchanged.
pred |
Definition at line 144 of file ConnectionManager.hpp.
Referenced by RTT::InputPort< T >::read().
std::list< ChannelDescriptor > RTT::internal::ConnectionManager::connections [protected] |
A list of all our connections.
Only non-null if two or more connections were added.
Definition at line 235 of file ConnectionManager.hpp.
Referenced by addConnection(), clear(), connected(), and disconnect().