46 using namespace detail;
60 if ( !
chkPtr(
"addPort",
"PortInterface", &port) )
return port;
67 log(
Warning) <<
"'addPort' "<< port.
getName() <<
": name already in use as Service. Replacing previous service with new one." <<endlog();
72 log(
Warning) <<
"'addPort' "<< port.
getName() <<
": DataFlowInterface not given to parent. Not adding Service." <<endlog();
83 for ( Ports::iterator it(
mports.begin());
86 if ( (*it)->getName() == port.
getName() ) {
87 log(
Warning) <<
"'addPort' "<< port.
getName() <<
": name already in use. Disconnecting and replacing previous port with new one." <<endlog();
98 if ( !
chkPtr(
"addEventPort",
"PortInterface", &port) )
return port;
105 log(
Warning) <<
"'addPort' "<< port.
getName() <<
": name already in use as Service. Replacing previous service with new one." <<endlog();
110 log(
Warning) <<
"'addPort' "<< port.
getName() <<
": DataFlowInterface not given to parent. Not adding Service." <<endlog();
119 #ifdef ORO_SIGNALLING_PORTS 120 void DataFlowInterface::setupHandles() {
121 for_each(handles.begin(), handles.end(), boost::bind(&
Handle::connect, _1));
124 void DataFlowInterface::cleanupHandles() {
139 log(
Error) <<
"addLocalEventPort "<< port.
getName() <<
": DataFlowInterface not part of a TaskContext. Will not trigger any TaskContext nor register callback." <<endlog();
143 #ifdef ORO_SIGNALLING_PORTS 145 Handle h = port.getNewDataOnPortEvent()->connect(boost::bind(&TaskContext::dataOnPort,
mservice->
getOwner(), _1) );
147 log(
Info) <<
mservice->
getName() <<
" will be triggered when new data is available on InputPort " << port.
getName() << endlog();
148 handles.push_back(h);
159 #ifndef ORO_SIGNALLING_PORTS 166 for ( Ports::iterator it(
mports.begin());
169 if ( (*it)->getName() == name ) {
180 (*it)->setInterface(0);
187 for ( Ports::iterator it(
mports.begin());
190 if ( (*it)->getName() == name ) {
192 (*it)->setInterface(0);
203 std::vector<std::string> res;
204 for ( Ports::const_iterator it(
mports.begin());
207 res.push_back( (*it)->getName() );
212 for ( Ports::const_iterator it(
mports.begin());
215 if ( (*it)->getName() == name )
221 for ( Ports::const_iterator it(
mports.begin());
224 if ( (*it)->getName() == name )
225 return (*it)->getDescription();
232 srv->doc(description);
248 to->
doc(
"No description set for this Port. Use .doc() to document it.");
256 for ( Ports::iterator it(
mports.begin());
268 log(
Error) <<
"You tried to add a null pointer in '"<< where <<
"' for the object '" << name <<
"'. Fix your code !"<< endlog();
const std::string & getName() const
Returns the name of this service instance.
base::PortInterface & addPort(const std::string &name, base::PortInterface &port)
Name and add a Port to the interface of this task and add a Service with the same name of the port...
void removeLocalPort(const std::string &name)
Remove a locally added Port from this interface.
TaskContext * getOwner() const
The owner is the top-level TaskContext owning this service (indirectly).
Service::shared_ptr provides()
Returns this Service, unless no shared_ptr yet exists.
virtual bool trigger()
Invoke this method to trigger the thread of this TaskContext to execute its ExecutionEngine and the u...
PortNames getPortNames() const
Get all port names of this interface.
virtual void removeService(std::string const &service_name)
Remove a previously added sub-service, potentially freeing it (and this) from memory.
base::PortInterface & addLocalPort(base::PortInterface &port)
Add a Port to this task without registering a service for it.
const std::string & getName() const
Get the name of this Port.
shared_ptr getService(const std::string &service_name)
Returns a shared pointer to strictly a sub-service of a null pointer if !hasService(service_name).
std::string getPortDescription(const std::string &name) const
Get the description of an added Port.
base::InputPortInterface & addEventPort(const std::string &name, base::InputPortInterface &port, SlotFunction callback=SlotFunction())
Name and add an Event triggering Port to the interface of this task and add a Service with the same n...
Ports mports
All our ports.
base::InputPortInterface & addLocalEventPort(base::InputPortInterface &port, SlotFunction callback=SlotFunction())
Add an Event triggering Port to this task without registering a service for it.
boost::shared_ptr< Service > shared_ptr
This class allows storage and retrieval of operations, ports, attributes and properties provided by a...
bool disconnect()
Disconnect the slot from the signal.
base::PortInterface * getPort(const std::string &name) const
Get an added port.
void removePort(const std::string &name)
Remove a Port from this interface.
virtual Service * createPortObject()
Create accessor Object for this Port, for addition to a TaskContext Object interface.
const std::string & doc() const
Returns a descriptive text for this service.
virtual bool addService(shared_ptr obj)
Add a new sub-service to this Service.
bool connect()
(Re-)Connect the slot with the signal.
boost::function< void(base::PortInterface *)> SlotFunction
bool hasService(const std::string &service_name)
Check if this service has the sub-service service_name.
std::vector< base::PortInterface * > Ports
A sequence of pointers to ports.
bool setPortDescription(const std::string &name, const std::string description)
Sets the description for the service of an added port.
std::vector< std::string > PortNames
A sequence of names of ports.
void setInterface(DataFlowInterface *iface)
Once a port is added to a DataFlowInterface, it gets a pointer to that interface. ...
bool chkPtr(const std::string &where, const std::string &name, const void *ptr)
The TaskContext is the C++ representation of an Orocos component.
Ports getPorts() const
Get all ports of this interface.
Service * mservice
The parent Service.
void dataOnPort(base::PortInterface *port)
Used by the input ports to notify this class of new data.
Contains TaskContext, Activity, OperationCaller, Operation, Property, InputPort, OutputPort, Attribute.
void clear()
Remove all added ports from this interface and all associated TaskObjects.
The base class of every data flow port.
DataFlowInterface(Service *parent=0)
Construct the DataFlow interface of a Service.
The Handle holds the information, and allows manipulation, of a connection between a internal::Signal...
TaskContext * getOwner() const
Returns the component this interface belongs to.
Service * createPortObject(const std::string &name)
Create a Service through which one can access a Port.