Orocos Real-Time Toolkit  2.9.0
Public Types | Public Member Functions | Static Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
RTT::base::DataSourceBase Class Referenceabstract

The base class for all internal data representations. More...

#include <rtt/base/DataSourceBase.hpp>

Inheritance diagram for RTT::base::DataSourceBase:
RTT::internal::DataSource< A > RTT::internal::DataSource< arg_t > RTT::internal::DataSource< bool > RTT::internal::DataSource< boost::shared_ptr< ObjT > > RTT::internal::DataSource< CORBA::Any_var > RTT::internal::DataSource< double > RTT::internal::DataSource< ds_type > RTT::internal::DataSource< first_arg_t > RTT::internal::DataSource< os::TimeService::Seconds > RTT::internal::DataSource< ProgramInterfacePtr > RTT::internal::DataSource< remove_cr< boost::function_traits< Signature >::result_type >::type > RTT::internal::DataSource< remove_cr< function::result_type >::type > RTT::internal::DataSource< S > RTT::internal::DataSource< second_arg_t > RTT::internal::DataSource< SendStatus > RTT::internal::DataSource< StateMachinePtr > RTT::internal::DataSource< unsigned int > RTT::internal::DataSource< T >

Public Types

typedef boost::intrusive_ptr< DataSourceBaseshared_ptr
 Use this type to store a pointer to a DataSourceBase. More...
 
typedef boost::intrusive_ptr< const DataSourceBaseconst_ptr
 Use this type to store a const pointer to a DataSourceBase. More...
 

Public Member Functions

 DataSourceBase ()
 
void ref () const
 Increase the reference count by one. More...
 
void deref () const
 Decrease the reference count by one and delete this on zero. More...
 
virtual void reset ()
 Reset the data to initial values. More...
 
virtual bool evaluate () const =0
 Force an evaluation of the DataSourceBase. More...
 
virtual bool isAssignable () const
 Returns true if this object can be cast to an AssignableDataSource. More...
 
virtual void updated ()
 In case the internal::DataSource returns a 'reference' type, call this method to notify it that the data was updated in the course of an invocation of get(). More...
 
virtual bool update (DataSourceBase *other)
 Update the value of this internal::DataSource with the value of an other DataSource. More...
 
virtual ActionInterfaceupdateAction (DataSourceBase *other)
 Generate a ActionInterface object which will update this internal::DataSource with the value of another internal::DataSource when execute()'ed. More...
 
virtual shared_ptr getMember (const std::string &member_name)
 Get a (const) reference data source to a member of the structure of this data source. More...
 
virtual shared_ptr getMember (DataSourceBase::shared_ptr member_id, DataSourceBase::shared_ptr offset)
 Same as above, but with run-time lookup of the member to use. More...
 
virtual std::vector< std::string > getMemberNames () const
 Returns the names of all members of the structure contained in this data source, or an empty list if none. More...
 
virtual shared_ptr getParent ()
 Returns the top level data source that contains the full data structure this data source refers to. More...
 
virtual DataSourceBaseclone () const =0
 Return a shallow clone of this DataSource. More...
 
virtual DataSourceBasecopy (std::map< const DataSourceBase *, DataSourceBase * > &alreadyCloned) const =0
 Create a deep copy of this internal::DataSource, unless it is already cloned. More...
 
virtual std::string getType () const =0
 Return useful type info in a human readable format. More...
 
virtual const types::TypeInfogetTypeInfo () const =0
 Return the Orocos type info object. More...
 
virtual std::string getTypeName () const =0
 Return the Orocos type name, without const, pointer or reference qualifiers. More...
 
std::ostream & write (std::ostream &os)
 Stream the contents of this object. More...
 
std::string toString ()
 Get the contents of this object as a string. More...
 
virtual void * getRawPointer ()
 Returns a pointer to the sample contained in this data source, if there is any, and if it is an lvalue. More...
 
virtual void const * getRawConstPointer ()
 Returns a const pointer to the sample contained in this data source, if there is any. More...
 

Static Public Member Functions

static shared_ptr stack_shared_ptr (DataSourceBase *dsb)
 Returns a shared ptr to a DataSourceBase living on the stack. More...
 
static const_ptr stack_const_ptr (const DataSourceBase *dsb)
 Returns a const shared_ptr to a DataSourceBase living on the stack. More...
 

Protected Member Functions

virtual ~DataSourceBase ()
 the destructor is private. More...
 

Protected Attributes

os::AtomicInt refcount
 We keep the refcount ourselves. More...
 

Detailed Description

The base class for all internal data representations.

The internal::DataSource is an object containing Data of any type. It's interface is designed for dynamic build-up and destruction of these objects and allowing Commands, Properties etc to use them as 'storage' devices which have the dual copy() /clone() semantics (which is heavily used by the Orocos type and scripting Infrastructure).

internal::DataSource's are reference counted and must be allocated on the heap. Use DataSourceBase::shared_ptr or internal::DataSource<T>::shared_ptr to deal with cleanup of allocated DataSources. You are not allowed to delete a DataSource. If you must have the pointer of a internal::DataSource, use the .get() method of the shared_ptr class.

Once a newly created internal::DataSource is assigned to a shared_ptr, it will be deleted when that pointer goes out of scope and is not shared by other shared_ptr objects.

See also
internal::DataSource

Definition at line 76 of file DataSourceBase.hpp.

Member Typedef Documentation

typedef boost::intrusive_ptr<const DataSourceBase> RTT::base::DataSourceBase::const_ptr

Use this type to store a const pointer to a DataSourceBase.

Definition at line 104 of file DataSourceBase.hpp.

Use this type to store a pointer to a DataSourceBase.

Definition at line 99 of file DataSourceBase.hpp.

Constructor & Destructor Documentation

RTT::DataSourceBase::~DataSourceBase ( )
protectedvirtual

the destructor is private.

You are not allowed to delete this class RTT_API yourself, use a shared pointer !

Definition at line 83 of file DataSource.cpp.

RTT::DataSourceBase::DataSourceBase ( )

Definition at line 79 of file DataSource.cpp.

Member Function Documentation

virtual DataSourceBase* RTT::base::DataSourceBase::clone ( ) const
pure virtual

Return a shallow clone of this DataSource.

This method returns a duplicate of this instance which re-uses the DataSources this internal::DataSource holds reference to. The clone() function is thus a non-deep copy.

Implemented in RTT::internal::NArityDataSource< function >, RTT::internal::UnaryDataSource< function >, RTT::internal::BinaryDataSource< function >, RTT::internal::ActionAliasAssignableDataSource< T >, RTT::internal::ActionAliasDataSource< T >, RTT::internal::LateConstReferenceDataSource< T >, RTT::internal::LateConstReferenceDataSource< A >, RTT::internal::FusedMCollectDataSource< Signature >, CorbaOperationCallerCollect, RTT::internal::LateReferenceDataSource< T >, RTT::internal::LateReferenceDataSource< ds_type >, RTT::internal::FusedMSendDataSource< Signature >, RTT::internal::ArrayDataSource< T >, RTT::internal::FusedMCallDataSource< Signature >, RTT::internal::AliasDataSource< T >, RTT::internal::ReferenceDataSource< T >, RTT::internal::ReferenceDataSource< ds_type >, RTT::internal::AssignableDataSource< T >, RTT::internal::AssignableDataSource< DataSourceType >, RTT::internal::AssignableDataSource< SendHandle< Signature > >, RTT::internal::AssignableDataSource< types::carray< T > >, RTT::internal::AssignableDataSource< remove_cr< boost::function_traits< Signature >::result_type >::type >, RTT::internal::AssignableDataSource< ds_type >, RTT::internal::AssignableDataSource< value_t >, RTT::internal::AssignableDataSource< bool >, RTT::internal::FusedFunctorDataSource< Signature, typename boost::enable_if< is_pure_reference< typename boost::function_traits< Signature >::result_type > >::type >, RTT::corba::ValueDataSourceProxy< T >, RTT::internal::PartDataSource< types::carray< T > >, RTT::internal::ConstReferenceDataSource< T >, RTT::internal::DataSource< T >, RTT::internal::ConstantDataSource< T >, RTT::internal::DataSource< ProgramInterfacePtr >, RTT::internal::DataSource< SendStatus >, RTT::internal::DataSource< double >, RTT::internal::DataSource< A >, RTT::internal::DataSource< S >, RTT::internal::DataSource< CORBA::Any_var >, RTT::internal::DataSource< unsigned int >, RTT::internal::DataSource< remove_cr< function::result_type >::type >, RTT::internal::DataSource< os::TimeService::Seconds >, RTT::internal::DataSource< arg_t >, RTT::internal::DataSource< remove_cr< boost::function_traits< Signature >::result_type >::type >, RTT::internal::DataSource< second_arg_t >, RTT::internal::DataSource< ds_type >, RTT::internal::DataSource< bool >, RTT::internal::DataSource< StateMachinePtr >, RTT::internal::DataSource< boost::shared_ptr< ObjT > >, RTT::internal::DataSource< first_arg_t >, RTT::internal::FusedFunctorDataSource< Signature, Enable >, RTT::internal::ArrayPartDataSource< T >, RTT::corba::DataSourceProxy< T >, RTT::internal::PartDataSource< T >, RTT::scripting::CmdFunction, RTT::internal::InputPortSource< T >, RTT::internal::ValueDataSource< T >, RTT::internal::ValueDataSource< ProgramInterfacePtr >, RTT::internal::ValueDataSource< ds_type >, RTT::internal::ValueDataSource< StateMachinePtr >, RTT::CmdFunctionWrapper, RTT::corba::AnyDataSource, RTT::scripting::DataSourceTime, RTT::internal::DataSourceCommand, RTT::scripting::DataSourceCondition, and RTT::internal::DataObjectDataSource< T >.

virtual DataSourceBase* RTT::base::DataSourceBase::copy ( std::map< const DataSourceBase *, DataSourceBase * > &  alreadyCloned) const
pure virtual

Create a deep copy of this internal::DataSource, unless it is already cloned.

Places the association (parent, clone) in alreadyCloned. If the internal::DataSource is non-copyable (for example it represents the Property of a Task ), this may be returned.

Implemented in RTT::internal::NArityDataSource< function >, RTT::internal::UnaryDataSource< function >, RTT::internal::BinaryDataSource< function >, RTT::internal::ActionAliasAssignableDataSource< T >, RTT::internal::ActionAliasDataSource< T >, RTT::internal::LateConstReferenceDataSource< T >, RTT::internal::LateConstReferenceDataSource< A >, RTT::internal::FusedMCollectDataSource< Signature >, RTT::internal::LateReferenceDataSource< T >, RTT::internal::LateReferenceDataSource< ds_type >, RTT::internal::FusedMSendDataSource< Signature >, RTT::internal::ArrayDataSource< T >, RTT::internal::FusedMCallDataSource< Signature >, RTT::internal::AliasDataSource< T >, RTT::internal::ReferenceDataSource< T >, RTT::internal::ReferenceDataSource< ds_type >, RTT::internal::AssignableDataSource< T >, RTT::internal::AssignableDataSource< DataSourceType >, RTT::internal::AssignableDataSource< SendHandle< Signature > >, RTT::internal::AssignableDataSource< types::carray< T > >, RTT::internal::AssignableDataSource< remove_cr< boost::function_traits< Signature >::result_type >::type >, RTT::internal::AssignableDataSource< ds_type >, RTT::internal::AssignableDataSource< value_t >, RTT::internal::AssignableDataSource< bool >, RTT::internal::FusedFunctorDataSource< Signature, typename boost::enable_if< is_pure_reference< typename boost::function_traits< Signature >::result_type > >::type >, RTT::corba::ValueDataSourceProxy< T >, RTT::internal::PartDataSource< types::carray< T > >, RTT::internal::ConstReferenceDataSource< T >, RTT::internal::DataSource< T >, RTT::internal::ConstantDataSource< T >, RTT::internal::DataSource< ProgramInterfacePtr >, RTT::internal::DataSource< SendStatus >, RTT::internal::DataSource< double >, RTT::internal::DataSource< A >, RTT::internal::DataSource< S >, RTT::internal::DataSource< CORBA::Any_var >, RTT::internal::DataSource< unsigned int >, RTT::internal::DataSource< remove_cr< function::result_type >::type >, RTT::internal::DataSource< os::TimeService::Seconds >, RTT::internal::DataSource< arg_t >, RTT::internal::DataSource< remove_cr< boost::function_traits< Signature >::result_type >::type >, RTT::internal::DataSource< second_arg_t >, RTT::internal::DataSource< ds_type >, RTT::internal::DataSource< bool >, RTT::internal::DataSource< StateMachinePtr >, RTT::internal::DataSource< boost::shared_ptr< ObjT > >, RTT::internal::DataSource< first_arg_t >, RTT::internal::FusedFunctorDataSource< Signature, Enable >, RTT::internal::ArrayPartDataSource< T >, RTT::corba::DataSourceProxy< T >, RTT::internal::PartDataSource< T >, RTT::scripting::CmdFunction, RTT::internal::InputPortSource< T >, RTT::internal::ValueDataSource< T >, RTT::CmdFunctionWrapper, RTT::internal::ValueDataSource< ProgramInterfacePtr >, RTT::internal::ValueDataSource< ds_type >, RTT::internal::ValueDataSource< StateMachinePtr >, RTT::corba::AnyDataSource, RTT::scripting::DataSourceTime, RTT::internal::DataSourceCommand, RTT::scripting::DataSourceCondition, and RTT::internal::DataObjectDataSource< T >.

void RTT::DataSourceBase::deref ( ) const

Decrease the reference count by one and delete this on zero.

Definition at line 81 of file DataSource.cpp.

References RTT::os::AtomicInt::dec_and_test(), and refcount.

Referenced by RTT::base::intrusive_ptr_release().

virtual bool RTT::base::DataSourceBase::evaluate ( ) const
pure virtual

Force an evaluation of the DataSourceBase.

Returns
true on successful evaluation.

Implemented in RTT::internal::ActionAliasAssignableDataSource< T >, RTT::internal::ActionAliasDataSource< T >, RTT::internal::FusedMCallDataSource< Signature >, RTT::internal::AliasDataSource< T >, RTT::internal::FusedFunctorDataSource< Signature, typename boost::enable_if< is_pure_reference< typename boost::function_traits< Signature >::result_type > >::type >, RTT::internal::DataSource< T >, RTT::internal::DataSource< ProgramInterfacePtr >, RTT::internal::DataSource< SendStatus >, RTT::internal::DataSource< double >, RTT::internal::DataSource< A >, RTT::internal::DataSource< S >, RTT::internal::DataSource< CORBA::Any_var >, RTT::internal::DataSource< unsigned int >, RTT::internal::DataSource< remove_cr< function::result_type >::type >, RTT::internal::DataSource< os::TimeService::Seconds >, RTT::internal::DataSource< arg_t >, RTT::internal::DataSource< remove_cr< boost::function_traits< Signature >::result_type >::type >, RTT::internal::DataSource< second_arg_t >, RTT::internal::DataSource< ds_type >, RTT::internal::DataSource< bool >, RTT::internal::DataSource< StateMachinePtr >, RTT::internal::DataSource< boost::shared_ptr< ObjT > >, RTT::internal::DataSource< first_arg_t >, RTT::internal::FusedFunctorDataSource< Signature, Enable >, RTT::scripting::CmdFunction, RTT::internal::InputPortSource< T >, RTT::CmdFunctionWrapper, and RTT::internal::DataObjectDataSource< T >.

Referenced by RTT::StatementProcessor::D::doPrint().

DataSourceBase::shared_ptr RTT::DataSourceBase::getMember ( const std::string &  member_name)
virtual

Get a (const) reference data source to a member of the structure of this data source.

You must call getMember() in turn on the returned member to access sub-members.

Parameters
member_nameThe name of the member to get access to.
Returns
null if the member does not exist, this if member_name.empty(), and a reference data source to the member otherwise.

Definition at line 124 of file DataSource.cpp.

References RTT::types::TypeInfo::getMember(), and getTypeInfo().

DataSourceBase::shared_ptr RTT::DataSourceBase::getMember ( DataSourceBase::shared_ptr  member_id,
DataSourceBase::shared_ptr  offset 
)
virtual

Same as above, but with run-time lookup of the member to use.

Also takes an optional offset argument which can be used to offset the member in memory. This is necessary when using sequences of sequences. DataSources which are a sequence/offset member themselves must override this function to let the returned member take the offset into account.

Definition at line 130 of file DataSource.cpp.

References RTT::types::TypeInfo::getMember(), and getTypeInfo().

vector< string > RTT::DataSourceBase::getMemberNames ( ) const
virtual

Returns the names of all members of the structure contained in this data source, or an empty list if none.

If this data source is a sequence, it will not return the allowed index numbers.

Definition at line 134 of file DataSource.cpp.

References RTT::types::TypeInfo::getMemberNames(), and getTypeInfo().

DataSourceBase::shared_ptr RTT::DataSourceBase::getParent ( )
virtual

Returns the top level data source that contains the full data structure this data source refers to.

Defaults to returning this.

Definition at line 138 of file DataSource.cpp.

void const * RTT::DataSourceBase::getRawConstPointer ( )
virtual
void * RTT::DataSourceBase::getRawPointer ( )
virtual
virtual std::string RTT::base::DataSourceBase::getType ( ) const
pure virtual
virtual const types::TypeInfo* RTT::base::DataSourceBase::getTypeInfo ( ) const
pure virtual
virtual std::string RTT::base::DataSourceBase::getTypeName ( ) const
pure virtual
bool RTT::DataSourceBase::isAssignable ( ) const
virtual
void RTT::DataSourceBase::ref ( ) const
void RTT::DataSourceBase::reset ( )
virtual
DataSourceBase::const_ptr RTT::DataSourceBase::stack_const_ptr ( const DataSourceBase dsb)
static

Returns a const shared_ptr to a DataSourceBase living on the stack.

Make sure that the const_ptr does not outlive the stacked element.

Definition at line 74 of file DataSource.cpp.

References ref().

DataSourceBase::shared_ptr RTT::DataSourceBase::stack_shared_ptr ( DataSourceBase dsb)
static

Returns a shared ptr to a DataSourceBase living on the stack.

Make sure that the shared_ptr does not outlive the stacked element.

Definition at line 69 of file DataSource.cpp.

References ref().

std::string RTT::DataSourceBase::toString ( )

Get the contents of this object as a string.

See also
types::TypeInfo

Definition at line 98 of file DataSource.cpp.

bool RTT::DataSourceBase::update ( DataSourceBase other)
virtual
ActionInterface * RTT::DataSourceBase::updateAction ( DataSourceBase other)
virtual
void RTT::DataSourceBase::updated ( )
virtual
std::ostream & RTT::DataSourceBase::write ( std::ostream &  os)

Stream the contents of this object.

See also
types::TypeInfo

Definition at line 91 of file DataSource.cpp.

Member Data Documentation

os::AtomicInt RTT::base::DataSourceBase::refcount
mutableprotected

We keep the refcount ourselves.

We aren't using boost::shared_ptr, because boost::intrusive_ptr is better, exactly because it can be used with refcounts that are stored in the class itself. Advantages are that the shared_ptr's for derived classes use the same refcount, which is of course very much desired, and that refcounting happens in an efficient way, which is also nice :)

Definition at line 88 of file DataSourceBase.hpp.

Referenced by deref(), and ref().


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