Orocos Real-Time Toolkit  2.5.0
Public Types | Public Member Functions | Static Public Member Functions | Protected Attributes
RTT::internal::OffsetPartDataSource< T > Class Template Reference

A DataSource which is used to manipulate a reference to a part of a data source holding a sequence of elements. More...

#include <rtt/internal/OffsetPartDataSource.hpp>

Inheritance diagram for RTT::internal::OffsetPartDataSource< T >:
RTT::internal::AssignableDataSource< T > RTT::internal::DataSource< T > RTT::base::DataSourceBase

List of all members.

Public Types

typedef boost::intrusive_ptr
< OffsetPartDataSource< T > > 
shared_ptr
 Use this type to store a pointer to an AssignableDataSource.
typedef DataSource< T >::value_t value_t
 The bare type of T is extracted into value_t.
typedef DataSource< T >
::const_reference_t 
const_reference_t
typedef boost::call_traits
< value_t >::param_type 
param_t
typedef boost::call_traits
< value_t >::reference 
reference_t
typedef boost::intrusive_ptr
< const AssignableDataSource
< T > > 
const_ptr
 Use this type to store a const pointer to a DataSourceBase.
typedef T result_t

Public Member Functions

 OffsetPartDataSource (typename AssignableDataSource< T >::reference_t ref, DataSource< unsigned int >::shared_ptr index, base::DataSourceBase::shared_ptr parent, DataSource< unsigned int >::shared_ptr offset)
 The part is constructed from a reference to an existing array of elements and an index for accessing the n'th element.
DataSource< T >::result_t get () const
 Return the data as type T.
DataSource< T >::result_t value () const
 Return the result of the last evaluate() function.
void set (typename AssignableDataSource< T >::param_t t)
AssignableDataSource< T >
::reference_t 
set ()
 Get a reference to the value of this DataSource.
AssignableDataSource< T >
::const_reference_t 
rvalue () const
 Get a const reference to the value of this DataSource.
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().
virtual shared_ptr getParent ()
 Overloaded to pass on our own parent to the type system, such that offsets can be correctly calculated.
virtual OffsetPartDataSource< T > * clone () const
 Return a shallow clone of this DataSource.
virtual OffsetPartDataSource< T > * copy (std::map< const base::DataSourceBase *, base::DataSourceBase * > &replace) const
 Create a deep copy of this internal::DataSource, unless it is already cloned.
virtual void set (param_t t)=0
 Set this DataSource with a value.
void * getRawPointer ()
 Generic implementation of getRawPointer() based on set()
virtual bool isAssignable () const
 Returns true if this object can be cast to an AssignableDataSource.
virtual bool update (base::DataSourceBase *other)
 Update the value of this internal::DataSource with the value of an other DataSource.
virtual base::ActionInterfaceupdateAction (base::DataSourceBase *other)
 Generate a ActionInterface object which will update this internal::DataSource with the value of another internal::DataSource when execute()'ed.
 BOOST_STATIC_ASSERT (!details::HasConst< T >::value)
 If you get a compile error here, it means T has const or reference qualifiers, which is not allowed for DataSource<T>
void const * getRawConstPointer ()
 Generic implementation of getRawConstPointer() based on rvalue()
template<>
void const * getRawConstPointer ()
 Returns a const pointer to the sample contained in this data source, if there is any.
virtual bool evaluate () const
 Force an evaluation of the DataSourceBase.
virtual std::string getType () const
 Return useful type info in a human readable format.
virtual const types::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 shared_ptr getMember (const std::string &member_name)
 Get a (const) reference data source to a member of the structure of this data source.
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.
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.
std::ostream & write (std::ostream &os)
 Stream the contents of this object.
std::string toString ()
 Get the contents of this object as a string.

Static Public Member Functions

static AssignableDataSource< T > * narrow (base::DataSourceBase *db)
 This method narrows a base::DataSourceBase to a typeded AssignableDataSource, possibly returning a new object.
static std::string GetType ()
 Return usefull type info in a human readable format.
static const types::TypeInfoGetTypeInfo ()
 Return the Orocos type info.
static std::string GetTypeName ()
 Return the Orocos type name, without const, pointer or reference qualifiers.
static shared_ptr stack_shared_ptr (DataSourceBase *dsb)
 Returns a shared ptr to a DataSourceBase living on the stack.
static const_ptr stack_const_ptr (const DataSourceBase *dsb)
 Returns a const shared_ptr to a DataSourceBase living on the stack.

Protected Attributes

os::AtomicInt refcount
 We keep the refcount ourselves.

Detailed Description

template<typename T>
class RTT::internal::OffsetPartDataSource< T >

A DataSource which is used to manipulate a reference to a part of a data source holding a sequence of elements.

It supports referencing to elements of sequences in sequences.

It requires to know which 'top level' element it is reading parts of, this is called the parent. It also requires proper offset calculation which takes into account a shift in memory location in case the one of the higher level elements is also a sequence. The offset calculation is done by an OffsetDataSource.

Parameters:
TThe data type of an element.

Definition at line 139 of file OffsetPartDataSource.hpp.


Constructor & Destructor Documentation

template<typename T>
RTT::internal::OffsetPartDataSource< T >::OffsetPartDataSource ( typename AssignableDataSource< T >::reference_t  ref,
DataSource< unsigned int >::shared_ptr  index,
base::DataSourceBase::shared_ptr  parent,
DataSource< unsigned int >::shared_ptr  offset 
) [inline]

The part is constructed from a reference to an existing array of elements and an index for accessing the n'th element.

Parameters:
refReference to the first element of the sequence
indexDatasource pointing to the index for use in operator[]
parentParent data source for sending updated() messages. This should not be a part itself, but a ValueDataSource. May not be null.
offsetThe offset to the requested element, relative to ref, to use in calls to set() and get().

Definition at line 163 of file OffsetPartDataSource.hpp.


Member Function Documentation

template<typename T>
virtual OffsetPartDataSource<T>* RTT::internal::OffsetPartDataSource< T >::clone ( ) const [inline, 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.

Implements RTT::internal::AssignableDataSource< T >.

Definition at line 215 of file OffsetPartDataSource.hpp.

template<typename T>
virtual OffsetPartDataSource<T>* RTT::internal::OffsetPartDataSource< T >::copy ( std::map< const base::DataSourceBase *, base::DataSourceBase * > &  alreadyCloned) const [inline, 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.

Implements RTT::internal::AssignableDataSource< T >.

Definition at line 219 of file OffsetPartDataSource.hpp.

References RTT::internal::DataSource< T >::copy().

template<typename T >
bool RTT::internal::DataSource< T >::evaluate ( ) const [virtual, inherited]
DataSourceBase::shared_ptr RTT::DataSourceBase::getMember ( const std::string &  member_name) [virtual, inherited]

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 RTT::base::DataSourceBase::getTypeInfo().

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 RTT::base::DataSourceBase::getTypeInfo().

vector< string > RTT::DataSourceBase::getMemberNames ( ) const [virtual, inherited]

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 RTT::base::DataSourceBase::getTypeInfo().

template<typename T>
virtual shared_ptr RTT::internal::OffsetPartDataSource< T >::getParent ( ) [inline, virtual]

Overloaded to pass on our own parent to the type system, such that offsets can be correctly calculated.

Returns:
The parent object that holds all data.

Reimplemented from RTT::base::DataSourceBase.

Definition at line 210 of file OffsetPartDataSource.hpp.

template<>
void const * RTT::internal::DataSource< void >::getRawConstPointer ( ) [inline, virtual, inherited]

Returns a const pointer to the sample contained in this data source, if there is any.

Returns 0 otherwise

Reimplemented from RTT::base::DataSourceBase.

Definition at line 59 of file DataSource.inl.

template<typename T>
virtual bool RTT::internal::AssignableDataSource< T >::isAssignable ( ) const [inline, virtual, inherited]

Returns true if this object can be cast to an AssignableDataSource.

When this method returns true, all update functions below will return as well when valid input is given.

Reimplemented from RTT::base::DataSourceBase.

Definition at line 216 of file DataSource.hpp.

template<typename T>
AssignableDataSource<T>::const_reference_t RTT::internal::OffsetPartDataSource< T >::rvalue ( ) const [inline, virtual]

Get a const reference to the value of this DataSource.

You must call evaluate() prior to calling this function in order to get the most recent value of this attribute.

Note:
Getting a reference to an internal data structure is not thread-safe.

Implements RTT::internal::DataSource< T >.

Definition at line 194 of file OffsetPartDataSource.hpp.

References RTT::internal::DataSource< T >::get().

template<typename T>
AssignableDataSource<T>::reference_t RTT::internal::OffsetPartDataSource< T >::set ( ) [inline, virtual]

Get a reference to the value of this DataSource.

Getting a reference to an internal data structure is not thread-safe.

Implements RTT::internal::AssignableDataSource< T >.

Definition at line 188 of file OffsetPartDataSource.hpp.

References RTT::internal::DataSource< T >::get().

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 RTT::base::DataSourceBase::ref().

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 RTT::base::DataSourceBase::ref().

std::string RTT::DataSourceBase::toString ( ) [inherited]

Get the contents of this object as a string.

See also:
types::TypeInfo

Definition at line 98 of file DataSource.cpp.

template<class T >
bool RTT::internal::AssignableDataSource< T >::update ( base::DataSourceBase other) [virtual, inherited]

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

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

Precondition:
this->isAssignable() == true
Returns:
false if the DataSources are of different type OR if the contents of this internal::DataSource can not be updated.

Reimplemented from RTT::base::DataSourceBase.

Definition at line 78 of file DataSource.inl.

References RTT::types::TypeInfo::convert(), RTT::internal::DataSource< T >::evaluate(), RTT::internal::DataSourceTypeInfo< T >::getTypeInfo(), and RTT::internal::DataSource< T >::value().

template<class T >
base::ActionInterface * RTT::internal::AssignableDataSource< T >::updateAction ( base::DataSourceBase other) [virtual, inherited]

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

Precondition:
this->isAssignable() == true
Returns:
zero if the internal::DataSource types do not match OR if the contents of this internal::DataSource can not be updated.

Reimplemented from RTT::base::DataSourceBase.

Definition at line 94 of file DataSource.inl.

References RTT::types::TypeInfo::convert(), and RTT::internal::DataSourceTypeInfo< T >::getTypeInfo().

template<typename T>
DataSource<T>::result_t RTT::internal::OffsetPartDataSource< T >::value ( ) const [inline, virtual]

Return the result of the last evaluate() function.

You must call evaluate() prior to calling this function in order to get the most recent value of this attribute.

Implements RTT::internal::DataSource< T >.

Definition at line 177 of file OffsetPartDataSource.hpp.

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

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

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


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