RTT::DataObjectPriorityGet< T > Class Template Reference

A DataObject which allows only the high priority thread to Get(), and both low and high priorities to Set(). More...

#include <rtt/DataObjectInterfaces.hpp>

Inheritance diagram for RTT::DataObjectPriorityGet< T >:
RTT::DataObjectInterface< T > RTT::AssignableDataSource< T > RTT::DataSource< T > RTT::DataSourceBase

List of all members.

Public Types

typedef T DataType
 The type of the data.
typedef boost::intrusive_ptr
< DataObjectInterface< T > > 
shared_ptr
 If you plan to use a reference counted DataObject, use this type to store it and apply this->deref() to enable reference counting.
typedef DataSource< T >::value_t value_t
 The bare type of T is extracted into value_t.
typedef boost::call_traits
< value_t >::param_type 
param_t
typedef boost::call_traits
< value_t >::reference 
reference_t
typedef boost::call_traits
< value_t >::const_reference 
const_reference_t
typedef boost::remove_const
< typename boost::call_traits
< value_t >::param_type >
::type 
copy_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

 DataObjectPriorityGet (const std::string &_name, const T &initial_value=T())
 Construct a DataObjectPriorityGet by name.
const std::string & getName () const
 Return the name of this DataObject.
void setName (const std::string &_name)
void Get (DataType &pull) const
 Get a copy of the Data of the module.
DataType Get () const
 Get a copy of the data of the module.
void Set (const DataType &push)
 Set the data to a certain value.
DataObjectPriorityGet< DataType > * clone () const
 Return a shallow clone of this DataSource.
DataObjectPriorityGet< DataType > * copy (std::map< const DataSourceBase *, DataSourceBase * > &) const
 Create a deep copy of this DataSource, unless it is already cloned.
DataSource< T >::result_t value () const
 Normally, value() does not trigger a get(), but for DataObjects, this is actually the sanest thing to do.
virtual DataSource< DataType >
::result_t 
get () const
 Return the data as type T.
virtual void set (typename AssignableDataSource< DataType >::param_t t)
virtual AssignableDataSource
< DataType >::reference_t 
set ()
 Get a reference (or null) to the value of this DataSource.
virtual void set (param_t t)=0
 Set this DataSource with a value.
virtual AssignableDataSource
< DataType >
::const_reference_t 
rvalue () const
 Get a const reference (or null) to the value of this DataSource.
virtual bool update (DataSourceBase *other)
 Update the value of this DataSource with the value of an other DataSource.
virtual CommandInterfaceupdateCommand (DataSourceBase *other)
 Generate a CommandInterface object which will update this DataSource with the value of another DataSource when execute()'ed.
virtual bool updateBlob (int protocol, const void *data)
 Updates the value of this DataSource with the value of a transportable data object.
virtual void * server (int protocol, void *data)
 Create an object server which 'mirrors' this DataSource.
virtual bool evaluate () const
 Force an evaluation of the DataSourceBase.
template<>
RTT_API 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 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 updatePart (DataSourceBase *part, DataSourceBase *other)
 Update part of the value of this DataSource with the value of an other DataSource.
virtual CommandInterfaceupdatePartCommand (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 int serverProtocol () const
 Inspect if this DataSource is a proxy for a remote server object.
virtual void * method (int protocol, MethodC *orig, void *arg)
 Create an object server which 'mirrors' this DataSource.

Static Public Member Functions

static AssignableDataSource< T > * narrow (DataSourceBase *db)
 This method narrows a 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 TypeInfoGetTypeInfo ()
 Return the Orocos type info.
static std::string GetTypeName ()
 Return the Orocos type name, without const, pointer or reference qualifiers.

Protected Attributes

OS::AtomicInt refcount
 We keep the refcount ourselves.

Detailed Description

template<class T>
class RTT::DataObjectPriorityGet< T >

A DataObject which allows only the high priority thread to Get(), and both low and high priorities to Set().

A class which provides locked/protected access to one typed element of data, where the locking is optimised for Low priority thread writes and High priority thread reads. The Get() operation is always non blocking.

Warning:
This DataObject can only be used in a two thread with distinct static priority model
     * The following Truth table applies when a Low Priority thread is
     * preempted by a High Priority thread :
     *
     *   L\H | Set | Get |
     *   Set | NA  | Ok  |
     *   Get | Blk | Ok  |
     *
     * legend : L : Low Priority thread
     *          H : High Priority thread
     *          Blk: Blocks High Priority thread (bad!)
     *          NA : Not allowed !
     * 

If only one thread accesses the DataObject simultaneously (e.g. single threaded systems), then the Get() and Set() methods will never block.

Invariant:
The Set() context has a strictly lower priority than the Get() context.
Get() never blocks.

Definition at line 365 of file DataObjectInterfaces.hpp.


Constructor & Destructor Documentation

template<class T >
RTT::DataObjectPriorityGet< T >::DataObjectPriorityGet ( const std::string &  _name,
const T &  initial_value = T() 
) [inline]

Construct a DataObjectPriorityGet by name.

Parameters:
_name The name of this DataObject.

Definition at line 383 of file DataObjectInterfaces.hpp.


Member Function Documentation

template<class T >
DataObjectPriorityGet<DataType>* RTT::DataObjectPriorityGet< 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 DataSource holds reference to. The clone() function is thus a non-deep copy.

Implements RTT::AssignableDataSource< T >.

Definition at line 442 of file DataObjectInterfaces.hpp.

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

Compose the contents of this object from another datasource.

See also:
TypeInfo
template<class T >
DataObjectPriorityGet<DataType>* RTT::DataObjectPriorityGet< T >::copy ( std::map< const DataSourceBase *, DataSourceBase * > &  alreadyCloned  )  const [inline, 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 RTT::AssignableDataSource< T >.

Definition at line 446 of file DataObjectInterfaces.hpp.

virtual void* RTT::DataSourceBase::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 RTT::Corba::ExpressionProxy.

Referenced by RTT::Corba::CorbaDataObjectProxy< T >::Set().

bool RTT::DataSourceBase::decomposeType ( PropertyBag targetbag  )  [inherited]

Decompose the contents of this object into properties.

See also:
TypeInfo
template<>
RTT_API bool RTT::DataSource< bool >::evaluate (  )  const [inline, virtual, inherited]

Force an evaluation of the DataSourceBase.

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

Implements RTT::DataSourceBase.

template<typename T >
bool RTT::DataSource< T >::evaluate (  )  const [inline, virtual, inherited]
template<class T >
DataType RTT::DataObjectPriorityGet< T >::Get (  )  const [inline, virtual]

Get a copy of the data of the module.

Returns:
A copy of the data.

Implements RTT::DataObjectInterface< T >.

Definition at line 426 of file DataObjectInterfaces.hpp.

References RTT::DataObjectPriorityGet< T >::Get().

Referenced by RTT::DataObjectPriorityGet< T >::Get().

template<class T >
void RTT::DataObjectPriorityGet< T >::Get ( DataType pull  )  const [inline, virtual]

Get a copy of the Data of the module.

Parameters:
pull A copy of the data.

Implements RTT::DataObjectInterface< T >.

Definition at line 408 of file DataObjectInterfaces.hpp.

References RTT::OS::MutexTryLock::isSuccessful().

virtual void* RTT::DataSourceBase::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 RTT::Corba::ExpressionProxy.

template<class T >
const std::string& RTT::DataObjectPriorityGet< T >::getName ( void   )  const [inline, virtual]

Return the name of this DataObject.

Returns:
The name

Implements RTT::DataObjectInterface< T >.

Definition at line 391 of file DataObjectInterfaces.hpp.

virtual void* RTT::DataSourceBase::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 RTT::Corba::ExpressionProxy.

template<class T>
virtual AssignableDataSource<DataType>::const_reference_t RTT::DataObjectInterface< T >::rvalue (  )  const [inline, virtual, inherited]

Get a const reference (or null) to the value of this DataSource.

Getting a reference to an internal data structure is not thread-safe. DataSources which wish to protect their data from concurrent access may return the null reference with this method. All calls to rvalue() must first check whether they do not return null.

Implements RTT::AssignableDataSource< T >.

Definition at line 142 of file DataObjectInterfaces.hpp.

template<typename T >
void * RTT::AssignableDataSource< T >::server ( int  protocol,
void *  arg 
) [inline, 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 from RTT::DataSourceBase.

Reimplemented in RTT::Corba::CORBAAssignableExpression< T >.

Definition at line 79 of file DataSource.inl.

References RTT::TypeInfo::getProtocol(), RTT::DataSource< T >::getTypeInfo(), and RTT::detail::TypeTransporter::server().

virtual int RTT::DataSourceBase::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 RTT::Corba::AnyDataSource, RTT::Corba::CORBAExpression< T >, RTT::Corba::CORBAExpression< void >, RTT::Corba::CORBAAssignableExpression< T >, and RTT::Corba::ExpressionProxy.

Referenced by RTT::AssignableDataSource< T >::narrow(), and RTT::DataSource< T >::narrow().

template<class T>
virtual AssignableDataSource<DataType>::reference_t RTT::DataObjectInterface< T >::set (  )  [inline, virtual, inherited]

Get a reference (or null) to the value of this DataSource.

Getting a reference to an internal data structure is not thread-safe. DataSources which wish to protect their data from concurrent access may return the null reference with this method. All calls to set() must first check whether they do not return null.

Implements RTT::AssignableDataSource< T >.

Definition at line 136 of file DataObjectInterfaces.hpp.

template<class T >
void RTT::DataObjectPriorityGet< T >::Set ( const DataType push  )  [inline, virtual]

Set the data to a certain value.

Parameters:
push The data which must be set.

Implements RTT::DataObjectInterface< T >.

Definition at line 433 of file DataObjectInterfaces.hpp.

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

Get the contents of this object as a string.

See also:
TypeInfo
template<class T >
bool RTT::AssignableDataSource< T >::update ( DataSourceBase other  )  [inline, 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 from RTT::DataSourceBase.

Definition at line 131 of file DataSource.inl.

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

template<typename T >
bool RTT::AssignableDataSource< T >::updateBlob ( int  protocol,
const void *  data 
) [inline, 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 from RTT::DataSourceBase.

Definition at line 67 of file DataSource.inl.

References RTT::TypeInfo::getProtocol(), RTT::DataSource< T >::getTypeInfo(), and RTT::detail::TypeTransporter::updateBlob().

Referenced by RTT::Corba::CorbaBufferProxy< T >::front(), RTT::Corba::CorbaDataObjectProxy< T >::Get(), RTT::Corba::ExpressionProxy::NarrowAssignableDataSource(), and RTT::Corba::ExpressionProxy::NarrowDataSource().

template<class T >
CommandInterface * RTT::AssignableDataSource< T >::updateCommand ( DataSourceBase other  )  [inline, 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 from RTT::DataSourceBase.

Reimplemented in RTT::Corba::CORBAAssignableExpression< T >, and RTT::IndexedValueDataSource< T, Index, SetType, IPred, APred >.

Definition at line 142 of file DataSource.inl.

Referenced by RTT::Property< bool >::refreshCommand().

virtual bool RTT::DataSourceBase::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.

Reimplemented in RTT::detail::AssignableDataSourceAdaptor< To const &, To >.

Referenced by RTT::detail::AssignableDataSourceAdaptor< To const &, To >::updatePart().

virtual CommandInterface* RTT::DataSourceBase::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 RTT::Corba::CORBAAssignableExpression< T >, RTT::detail::AssignableDataSourceAdaptor< To const &, To >, and RTT::IndexedValueDataSource< T, Index, SetType, IPred, APred >.

Referenced by RTT::detail::AssignableDataSourceAdaptor< To const &, To >::updatePartCommand().

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

Stream the contents of this object.

See also:
TypeInfo

Member Data Documentation

OS::AtomicInt RTT::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 89 of file DataSourceBase.hpp.


The documentation for this class was generated from the following file:
Generated on Thu Dec 23 13:22:40 2010 for Orocos Real-Time Toolkit by  doxygen 1.6.3