DataSource Class Template Reference

#include <rtt/DataSource.hpp>

Inheritance diagram for DataSource:

DataSourceBase AssignableDataSource BufferDataSource ConstantDataSource CORBAExpression DataSourceTime DataSourceArgsMethod CORBAAssignableExpression DataObjectInterface ReferenceDataSource ValueDataSource CorbaDataObject CorbaDataObjectProxy DataObject DataObjectLocked DataObjectLockFree DataObjectPriorityGet DataObjectPrioritySet IndexedValueDataSource

List of all members.


Detailed Description

template<typename T>
class RTT::DataSource< T >

DataSource is a base class representing a generic way to read data of type T.

See also:
DataSourceBase for shared_ptr use.
Parameters:
T The type of data returned by get(). It does not necessarily say that the data is stored as a T, it only specifies in which form the get() method returns the data. Thus a DataSource<const std::string&> returns a const ref to a string, but may store the string itself by value.

Definition at line 76 of file DataSource.hpp.


Public Types

typedef
boost::remove_const
< typename
boost::remove_reference
< T >::type >::type 
value_t
 The bare type of T is extracted into value_t.
typedef T result_t
typedef
boost::intrusive_ptr
< DataSource< T > > 
shared_ptr
 Use this type to store a pointer to a DataSourceBase.
typedef
boost::intrusive_ptr
< const DataSource
< T > > 
const_ptr
 Use this type to store a const pointer to a DataSourceBase.

Public Member Functions

virtual result_t get () const =0
 Return the data as type T.
virtual result_t value () const =0
 Return the result of the last evaluate() function.
virtual bool evaluate () const
 Force an evaluation of the DataSourceBase.
virtual DataSource< T > * clone () const =0
 Return a shallow clone of this DataSource.
virtual DataSource< T > * copy (std::map< const DataSourceBase *, DataSourceBase * > &alreadyCloned) const =0
 Create a deep copy of this DataSource, unless it is already cloned.
virtual std::string getType () const
 Return useful type info in a human readable format.
virtual const TypeInfogetTypeInfo () const
 Return the Orocos type info object.
virtual std::string getTypeName () const
 Return the Orocos type name, without const, pointer or reference qualifiers.
void ref () const
 Increase the reference count by one.
void deref () const
 Decrease the reference count by one and delete this on zero.
virtual void reset ()
 Reset the data to initial values.
virtual void updated ()
 In case the DataSource returns a 'reference' type, call this method to notify it that the data was updated in the course of an invocation of get().
virtual bool update (DataSourceBase *other)
 Update the value of this DataSource with the value of an other DataSource.
virtual
CommandInterface
updateCommand (DataSourceBase *other)
 Generate a CommandInterface object which will update this DataSource with the value of another DataSource when execute()'ed.
virtual bool updatePart (DataSourceBase *part, DataSourceBase *other)
 Update part of the value of this DataSource with the value of an other DataSource.
virtual
CommandInterface
updatePartCommand (DataSourceBase *part, DataSourceBase *other)
 Generate a CommandInterface object which will partially update this DataSource with the value of another DataSource when execute()'ed.
std::ostream & write (std::ostream &os)
 Stream the contents of this object.
std::string toString ()
 Get the contents of this object as a string.
bool decomposeType (PropertyBag &targetbag)
 Decompose the contents of this object into properties.
bool composeType (DataSourceBase::shared_ptr source)
 Compose the contents of this object from another datasource.
virtual void * createBlob (int protocol)
 Creates a transportable data object with the current value of this DataSource.
virtual void * getBlob (int protocol)
 Creates a transportable data object with the current value of this DataSource.
virtual bool updateBlob (int protocol, const void *data)
 Updates the value of this DataSource with the value of a transportable data object.
virtual int serverProtocol () const
 Inspect if this DataSource is a proxy for a remote server object.
virtual void * server (int protocol, void *arg)
 Create an object server which 'mirrors' this DataSource.
virtual void * method (int protocol, MethodC *orig, void *arg)
 Create an object server which 'mirrors' this DataSource.

Static Public Member Functions

static std::string GetType ()
 Return usefull type info in a human readable format.
static const TypeInfoGetTypeInfo ()
 Return the Orocos type info.
static std::string GetTypeName ()
 Return the Orocos type name, without const, pointer or reference qualifiers.
static DataSource< T > * narrow (DataSourceBase *db)
 This method narrows a DataSourceBase to a typeded DataSource, possibly returning a new object.

Protected Member Functions

virtual ~DataSource ()

Protected Attributes

oro_atomic_t refcount
 We keep the refcount ourselves.

Member Function Documentation

bool evaluate (  )  const [inline, virtual]

Force an evaluation of the DataSourceBase.

Returns:
true on successful evaluation. If the DataSource itself contains a boolean, return that boolean.

Implements DataSourceBase.

Definition at line 52 of file DataSource.inl.

Referenced by EvalCommand::readArguments(), FunctorImpl< 4, FunctionT >::readArguments(), FunctorImpl< 3, FunctionT >::readArguments(), FunctorImpl< 2, FunctionT >::readArguments(), FunctorImpl< 1, FunctionT >::readArguments(), FunctorDS1::readArguments(), and CommandDataSourceBool::readArguments().

virtual DataSource<T>* 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 DataSource holds reference to. The clone() function is thus a non-deep copy.

Implements DataSourceBase.

Implemented in BufferDataSource, AnyDataSource, CorbaDataObject, CorbaDataObjectProxy, CORBAExpression, CORBAExpression< void >, CORBAAssignableExpression, DataObjectLocked, DataObjectPrioritySet, DataObjectPriorityGet, DataObjectLockFree, DataObject, AssignableDataSource, DataSourceArgsMethod, DataSourceCommand, DataSourceCondition, ValueDataSource, ConstantDataSource, ReferenceDataSource, IndexedValueDataSource, BinaryDataSource, TernaryDataSource, SixaryDataSource, UnaryDataSource, NArityDataSource, DataSourceTime, FunctorDataSource0, FunctorDataSource1, FunctorDataSourceDS0, FunctorDataSourceDS1, FunctorDataSource2, FunctorDataSource3, FunctorDataSource4, FunctorDataSource5, FunctorDataSource6, AssignableDataSource< DataSourceType >, AssignableDataSource< boost::function_types::function_type_parameter_c< Function, 1 >::type >, AssignableDataSource< boost::function_types::function_type_parameter_c< Function, 0 >::type >, AssignableDataSource< EventT::SlotFunction::arg2_type >, AssignableDataSource< R >, AssignableDataSource< A >, AssignableDataSource< boost::function_traits< DataType >::arg3_type >, AssignableDataSource< RTT::ProgramInterface * >, AssignableDataSource< boost::function_traits< DataType >::arg1_type >, AssignableDataSource< boost::weak_ptr< RTT::ProgramInterface > >, AssignableDataSource< boost::function_traits< DataType >::arg2_type >, AssignableDataSource< boost::weak_ptr< RTT::StateMachine > >, AssignableDataSource< EventT::SlotFunction::arg1_type >, AssignableDataSource< bool >, AssignableDataSource< value_t >, AssignableDataSource< boost::function_traits< DataType >::result_type >, AssignableDataSource< EventT::SlotFunction::arg3_type >, AssignableDataSource< boost::function_traits< DataType >::arg4_type >, AssignableDataSource< boost::function_types::function_type_parameter_c< Function, 2 >::type >, ValueDataSource< R >, ValueDataSource< A >, ValueDataSource< boost::weak_ptr< ProgramInterface > >, ValueDataSource< boost::function_traits< DataType >::arg3_type >, ValueDataSource< boost::function_traits< DataType >::arg1_type >, ValueDataSource< boost::function_traits< DataType >::arg2_type >, ValueDataSource< boost::weak_ptr< StateMachine > >, ValueDataSource< boost::function_traits< DataType >::result_type >, ValueDataSource< boost::function_traits< DataType >::arg4_type >, FunctorDataSource0< F >, FunctorDataSource1< F, F::arg1_type >, FunctorDataSource2< F, F::arg1_type, F::arg2_type >, FunctorDataSource3< F, F::arg1_type, F::arg2_type, F::arg3_type >, FunctorDataSource4< F, F::arg1_type, F::arg2_type, F::arg3_type, F::arg4_type >, FunctorDataSource5< F, F::arg1_type, F::arg2_type, F::arg3_type, F::arg4_type, F::arg5_type >, and FunctorDataSource6< F, F::arg1_type, F::arg2_type, F::arg3_type, F::arg4_type, F::arg5_type, F::arg6_type >.

virtual DataSource<T>* copy ( std::map< const DataSourceBase *, DataSourceBase * > &  alreadyCloned  )  const [pure virtual]

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

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

Implements DataSourceBase.

Implemented in BufferDataSource, AnyDataSource, CorbaDataObject, CorbaDataObjectProxy, CORBAExpression, CORBAExpression< void >, CORBAAssignableExpression, DataObjectLocked, DataObjectPrioritySet, DataObjectPriorityGet, DataObjectLockFree, DataObject, AssignableDataSource, DataSourceArgsMethod, DataSourceCommand, DataSourceCondition, ValueDataSource, ConstantDataSource, ReferenceDataSource, IndexedValueDataSource, BinaryDataSource, TernaryDataSource, SixaryDataSource, UnaryDataSource, NArityDataSource, DataSourceTime, FunctorDataSource0, FunctorDataSource1, FunctorDataSourceDS0, FunctorDataSourceDS1, FunctorDataSource2, FunctorDataSource3, FunctorDataSource4, FunctorDataSource5, FunctorDataSource6, AssignableDataSource< DataSourceType >, AssignableDataSource< boost::function_types::function_type_parameter_c< Function, 1 >::type >, AssignableDataSource< boost::function_types::function_type_parameter_c< Function, 0 >::type >, AssignableDataSource< EventT::SlotFunction::arg2_type >, AssignableDataSource< R >, AssignableDataSource< A >, AssignableDataSource< boost::function_traits< DataType >::arg3_type >, AssignableDataSource< RTT::ProgramInterface * >, AssignableDataSource< boost::function_traits< DataType >::arg1_type >, AssignableDataSource< boost::weak_ptr< RTT::ProgramInterface > >, AssignableDataSource< boost::function_traits< DataType >::arg2_type >, AssignableDataSource< boost::weak_ptr< RTT::StateMachine > >, AssignableDataSource< EventT::SlotFunction::arg1_type >, AssignableDataSource< bool >, AssignableDataSource< value_t >, AssignableDataSource< boost::function_traits< DataType >::result_type >, AssignableDataSource< EventT::SlotFunction::arg3_type >, AssignableDataSource< boost::function_traits< DataType >::arg4_type >, AssignableDataSource< boost::function_types::function_type_parameter_c< Function, 2 >::type >, ValueDataSource< R >, ValueDataSource< A >, ValueDataSource< boost::weak_ptr< ProgramInterface > >, ValueDataSource< boost::function_traits< DataType >::arg3_type >, ValueDataSource< boost::function_traits< DataType >::arg1_type >, ValueDataSource< boost::function_traits< DataType >::arg2_type >, ValueDataSource< boost::weak_ptr< StateMachine > >, ValueDataSource< boost::function_traits< DataType >::result_type >, ValueDataSource< boost::function_traits< DataType >::arg4_type >, FunctorDataSource0< F >, FunctorDataSource1< F, F::arg1_type >, FunctorDataSource2< F, F::arg1_type, F::arg2_type >, FunctorDataSource3< F, F::arg1_type, F::arg2_type, F::arg3_type >, FunctorDataSource4< F, F::arg1_type, F::arg2_type, F::arg3_type, F::arg4_type >, FunctorDataSource5< F, F::arg1_type, F::arg2_type, F::arg3_type, F::arg4_type, F::arg5_type >, and FunctorDataSource6< F, F::arg1_type, F::arg2_type, F::arg3_type, F::arg4_type, F::arg5_type, F::arg6_type >.

Referenced by EvalCommandResult::copy(), EvalCommand::copy(), TryCommandResult::copy(), FunctorDataSource6< F, F::arg1_type, F::arg2_type, F::arg3_type, F::arg4_type, F::arg5_type, F::arg6_type >::copy(), FunctorDataSource5< F, F::arg1_type, F::arg2_type, F::arg3_type, F::arg4_type, F::arg5_type >::copy(), FunctorDataSource4< F, F::arg1_type, F::arg2_type, F::arg3_type, F::arg4_type >::copy(), FunctorDataSource3< F, F::arg1_type, F::arg2_type, F::arg3_type >::copy(), FunctorDataSource2< F, F::arg1_type, F::arg2_type >::copy(), FunctorDataSourceDS1::copy(), FunctorDataSourceDS0::copy(), FunctorDataSource1< F, F::arg1_type >::copy(), ConditionDSDuration::copy(), ConditionBoolDataSource::copy(), FunctorDS1::copy(), and CommandDataSourceBool::copy().

bool update ( DataSourceBase other  )  [virtual, inherited]

Update the value of this DataSource with the value of an other DataSource.

Update does a full update of the value, adding extra information if necessary.

Returns:
false if the DataSources are of different type OR if the contents of this DataSource can not be updated.

Reimplemented in AssignableDataSource, AssignableDataSource< DataSourceType >, AssignableDataSource< boost::function_types::function_type_parameter_c< Function, 1 >::type >, AssignableDataSource< boost::function_types::function_type_parameter_c< Function, 0 >::type >, AssignableDataSource< EventT::SlotFunction::arg2_type >, AssignableDataSource< R >, AssignableDataSource< A >, AssignableDataSource< boost::function_traits< DataType >::arg3_type >, AssignableDataSource< RTT::ProgramInterface * >, AssignableDataSource< boost::function_traits< DataType >::arg1_type >, AssignableDataSource< boost::weak_ptr< RTT::ProgramInterface > >, AssignableDataSource< boost::function_traits< DataType >::arg2_type >, AssignableDataSource< boost::weak_ptr< RTT::StateMachine > >, AssignableDataSource< EventT::SlotFunction::arg1_type >, AssignableDataSource< bool >, AssignableDataSource< value_t >, AssignableDataSource< boost::function_traits< DataType >::result_type >, AssignableDataSource< EventT::SlotFunction::arg3_type >, AssignableDataSource< boost::function_traits< DataType >::arg4_type >, and AssignableDataSource< boost::function_types::function_type_parameter_c< Function, 2 >::type >.

Definition at line 89 of file DataSource.cpp.

CommandInterface * updateCommand ( DataSourceBase other  )  [virtual, inherited]

Generate a CommandInterface object which will update this DataSource with the value of another DataSource when execute()'ed.

Returns:
zero if the DataSource types do not match OR if the contents of this DataSource can not be updated.

Reimplemented in CORBAAssignableExpression, AssignableDataSource, IndexedValueDataSource, AssignableDataSource< DataSourceType >, AssignableDataSource< boost::function_types::function_type_parameter_c< Function, 1 >::type >, AssignableDataSource< boost::function_types::function_type_parameter_c< Function, 0 >::type >, AssignableDataSource< EventT::SlotFunction::arg2_type >, AssignableDataSource< R >, AssignableDataSource< A >, AssignableDataSource< boost::function_traits< DataType >::arg3_type >, AssignableDataSource< RTT::ProgramInterface * >, AssignableDataSource< boost::function_traits< DataType >::arg1_type >, AssignableDataSource< boost::weak_ptr< RTT::ProgramInterface > >, AssignableDataSource< boost::function_traits< DataType >::arg2_type >, AssignableDataSource< boost::weak_ptr< RTT::StateMachine > >, AssignableDataSource< EventT::SlotFunction::arg1_type >, AssignableDataSource< bool >, AssignableDataSource< value_t >, AssignableDataSource< boost::function_traits< DataType >::result_type >, AssignableDataSource< EventT::SlotFunction::arg3_type >, AssignableDataSource< boost::function_traits< DataType >::arg4_type >, and AssignableDataSource< boost::function_types::function_type_parameter_c< Function, 2 >::type >.

Definition at line 97 of file DataSource.cpp.

bool updatePart ( DataSourceBase part,
DataSourceBase other 
) [virtual, inherited]

Update part of the value of this DataSource with the value of an other DataSource.

Update does a partial update of the value, according to part, which is most likely an index or hash value of some type.

Returns:
false if the DataSources are of different type OR if the contents of this DataSource can not be partially updated.

Definition at line 101 of file DataSource.cpp.

CommandInterface * updatePartCommand ( DataSourceBase part,
DataSourceBase other 
) [virtual, inherited]

Generate a CommandInterface object which will partially update this DataSource with the value of another DataSource when execute()'ed.

part is an index or hash value of some type.

Returns:
zero if the DataSource types do not match OR if the contents of this DataSource can not be partially updated.

Reimplemented in CORBAAssignableExpression, and IndexedValueDataSource.

Definition at line 105 of file DataSource.cpp.

Referenced by CORBAAssignableExpression::updatePartCommand().

std::ostream & write ( std::ostream &  os  )  [inherited]

Stream the contents of this object.

See also:
TypeInfo

Definition at line 59 of file DataSource.cpp.

std::string toString (  )  [inherited]

Get the contents of this object as a string.

See also:
TypeInfo

Definition at line 71 of file DataSource.cpp.

bool decomposeType ( PropertyBag targetbag  )  [inherited]

Decompose the contents of this object into properties.

See also:
TypeInfo

Definition at line 77 of file DataSource.cpp.

bool composeType ( DataSourceBase::shared_ptr  source  )  [inherited]

Compose the contents of this object from another datasource.

See also:
TypeInfo

Definition at line 83 of file DataSource.cpp.

void * createBlob ( int  protocol  )  [virtual, inherited]

Creates a transportable data object with the current value of this DataSource.

This does not trigger the evaluation() of this data source.

Returns:
a valid object or nill if this type is not supported.

Reimplemented in ExpressionProxy.

Definition at line 116 of file DataSource.cpp.

References TypeTransporter::createBlob(), TypeInfo::getProtocol(), and DataSourceBase::getTypeInfo().

Referenced by CorbaBufferProxy::Push(), CORBAAssignableExpression::set(), and CorbaDataObjectProxy::Set().

void * getBlob ( int  protocol  )  [virtual, inherited]

Creates a transportable data object with the current value of this DataSource.

This does trigger the evaluation() of this data source. Equivalent to this->evaluate(); this->createBlob();

Returns:
a valid object or nill if this type is not supported.

Reimplemented in ExpressionProxy.

Definition at line 126 of file DataSource.cpp.

References TypeTransporter::createBlob(), DataSourceBase::evaluate(), TypeInfo::getProtocol(), and DataSourceBase::getTypeInfo().

bool updateBlob ( int  protocol,
const void *  data 
) [virtual, inherited]

Updates the value of this DataSource with the value of a transportable data object.

Parameters:
any The value to update to.
Returns:
true if any had the correct type.

Reimplemented in AssignableDataSource, AssignableDataSource< DataSourceType >, AssignableDataSource< boost::function_types::function_type_parameter_c< Function, 1 >::type >, AssignableDataSource< boost::function_types::function_type_parameter_c< Function, 0 >::type >, AssignableDataSource< EventT::SlotFunction::arg2_type >, AssignableDataSource< R >, AssignableDataSource< A >, AssignableDataSource< boost::function_traits< DataType >::arg3_type >, AssignableDataSource< RTT::ProgramInterface * >, AssignableDataSource< boost::function_traits< DataType >::arg1_type >, AssignableDataSource< boost::weak_ptr< RTT::ProgramInterface > >, AssignableDataSource< boost::function_traits< DataType >::arg2_type >, AssignableDataSource< boost::weak_ptr< RTT::StateMachine > >, AssignableDataSource< EventT::SlotFunction::arg1_type >, AssignableDataSource< bool >, AssignableDataSource< value_t >, AssignableDataSource< boost::function_traits< DataType >::result_type >, AssignableDataSource< EventT::SlotFunction::arg3_type >, AssignableDataSource< boost::function_traits< DataType >::arg4_type >, and AssignableDataSource< boost::function_types::function_type_parameter_c< Function, 2 >::type >.

Definition at line 137 of file DataSource.cpp.

int serverProtocol (  )  const [virtual, inherited]

Inspect if this DataSource is a proxy for a remote server object.

Returns:
0 if it is a local DataSource, or the protocol id if it is a proxy for a remove server.

Reimplemented in AnyDataSource, CORBAExpression, CORBAExpression< void >, CORBAAssignableExpression, and ExpressionProxy.

Definition at line 142 of file DataSource.cpp.

Referenced by AssignableDataSource::narrow(), DataSource::narrow(), CorbaTemplateProtocol::narrowAssignableDataSource(), and CorbaTemplateProtocol::narrowDataSource().

void * server ( int  protocol,
void *  arg 
) [virtual, inherited]

Create an object server which 'mirrors' this DataSource.

Returns:
The existing server if serverProtocol() == protocol, or a new server object reference otherwise.
See also:
Operations.idl

Reimplemented in CORBAExpression, CORBAExpression< void >, CORBAAssignableExpression, ExpressionProxy, AssignableDataSource, AssignableDataSource< DataSourceType >, AssignableDataSource< boost::function_types::function_type_parameter_c< Function, 1 >::type >, AssignableDataSource< boost::function_types::function_type_parameter_c< Function, 0 >::type >, AssignableDataSource< EventT::SlotFunction::arg2_type >, AssignableDataSource< R >, AssignableDataSource< A >, AssignableDataSource< boost::function_traits< DataType >::arg3_type >, AssignableDataSource< RTT::ProgramInterface * >, AssignableDataSource< boost::function_traits< DataType >::arg1_type >, AssignableDataSource< boost::weak_ptr< RTT::ProgramInterface > >, AssignableDataSource< boost::function_traits< DataType >::arg2_type >, AssignableDataSource< boost::weak_ptr< RTT::StateMachine > >, AssignableDataSource< EventT::SlotFunction::arg1_type >, AssignableDataSource< bool >, AssignableDataSource< value_t >, AssignableDataSource< boost::function_traits< DataType >::result_type >, AssignableDataSource< EventT::SlotFunction::arg3_type >, AssignableDataSource< boost::function_traits< DataType >::arg4_type >, and AssignableDataSource< boost::function_types::function_type_parameter_c< Function, 2 >::type >.

Definition at line 147 of file DataSource.cpp.

References TypeInfo::getProtocol(), DataSourceBase::getTypeInfo(), and TypeTransporter::server().

Referenced by CorbaTemplateProtocol::narrowAssignableDataSource(), and CorbaTemplateProtocol::narrowDataSource().

void * method ( int  protocol,
MethodC orig,
void *  arg 
) [virtual, inherited]

Create an object server which 'mirrors' this DataSource.

Returns:
The existing server if serverProtocol() == protocol, or a new method object reference otherwise.
See also:
Operations.idl

Reimplemented in ExpressionProxy.

Definition at line 157 of file DataSource.cpp.

References TypeInfo::getProtocol(), DataSourceBase::getTypeInfo(), and TypeTransporter::method().


Member Data Documentation

oro_atomic_t refcount [mutable, protected, inherited]

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 89 of file DataSourceBase.hpp.

Referenced by DataSourceBase::DataSourceBase(), DataSourceBase::deref(), and DataSourceBase::ref().


The documentation for this class was generated from the following files:
Generated on Tue Mar 25 17:41:55 2008 for OrocosReal-TimeToolkit by  doxygen 1.5.3