Orocos Real-Time Toolkit  2.9.0
Public Types | Public Member Functions | Protected Types | Protected Attributes | List of all members
RTT::types::TypeInfo Class Reference

A class for representing a user type, and which can build instances of that type. More...

#include <rtt/types/TypeInfo.hpp>

Public Types

typedef const std::type_info * TypeId
 

Public Member Functions

 TypeInfo (const std::string &name)
 
 ~TypeInfo ()
 
const std::string & getTypeName () const
 Return the type name which was first registered. More...
 
std::vector< std::string > getTypeNames () const
 Returns all registered names and aliases of this type. More...
 
void addAlias (const std::string &alias)
 Adds an alias to the this type. More...
 
bool isType (const std::string &name)
 Returns true if this type is known by the type system under the given name. More...
 
TypeId getTypeId () const
 Returns the compiler generated type id pointer. More...
 
const char * getTypeIdName () const
 Returns the compiler generated type name (non portable accross compilers!). More...
 
base::DataSourceBase::shared_ptr construct (const std::vector< base::DataSourceBase::shared_ptr > &args) const
 Constructor syntax: construct a internal::DataSource which returns an instance of data depending on the given arguments. More...
 
base::DataSourceBase::shared_ptr convert (base::DataSourceBase::shared_ptr arg) const
 Automatic conversion: convert a internal::DataSource to this type. More...
 
void addConstructor (TypeConstructor *tb)
 Add a constructor/convertor object. More...
 
base::InputPortInterfaceinputPort (std::string const &name) const
 Returns a new InputPort<T> object where T is the type represented by this TypeInfo object. More...
 
base::OutputPortInterfaceoutputPort (std::string const &name) const
 Returns a new OutputPort<T> object where T is the type represented by this TypeInfo object. More...
 
base::ChannelElementBase::shared_ptr buildDataStorage (ConnPolicy const &policy) const
 Creates single data or buffered storage for this type. More...
 
base::ChannelElementBase::shared_ptr buildChannelOutput (base::InputPortInterface &port, ConnPolicy const &policy) const
 
base::ChannelElementBase::shared_ptr buildChannelInput (base::OutputPortInterface &port, ConnPolicy const &policy) const
 
internal::SharedConnectionBase::shared_ptr buildSharedConnection (base::OutputPortInterface *output_port, base::InputPortInterface *input_port, ConnPolicy const &policy) const
 
void setTypeId (TypeId tid)
 
void setPortFactory (ConnFactoryPtr cf)
 Installs a new port factory such that in-process data can be communicated between components. More...
 
ConnFactoryPtr getPortFactory () const
 
void setMemberFactory (MemberFactoryPtr mf)
 
MemberFactoryPtr getMemberFactory () const
 
void setValueFactory (ValueFactoryPtr dsf)
 
ValueFactoryPtr getValueFactory () const
 
void setCompositionFactory (CompositionFactoryPtr cf)
 
CompositionFactoryPtr getCompositionFactory () const
 
void setStreamFactory (StreamFactoryPtr sf)
 
StreamFactoryPtr getStreamFactory () const
 
Distribution of objects

Used to transport data over a network.

bool addProtocol (int protocol_id, TypeTransporter *tt)
 Register a protocol for data transport over a network. More...
 
TypeTransportergetProtocol (int protocol_id) const
 Returns this type's transport for a given protocol. More...
 
bool hasProtocol (int protocol_id) const
 Check if this type is transporable over a given protocol. More...
 
std::vector< int > getTransportNames () const
 Return a list of protocols that have transporters. More...
 
Type building/factory functions

Used to create objects that hold data of a certain type.

base::AttributeBasebuildConstant (std::string name, base::DataSourceBase::shared_ptr source, int sizehint) const
 Build a non modifyable instance of this type. More...
 
base::AttributeBasebuildConstant (std::string name, base::DataSourceBase::shared_ptr source) const
 Build a non modifyable instance of this type. More...
 
base::AttributeBasebuildVariable (std::string name, int sizehint) const
 Build a modifyable instance of this type. More...
 
base::AttributeBasebuildVariable (std::string name) const
 Build a non modifyable instance of this type. More...
 
bool resize (base::DataSourceBase::shared_ptr arg, int size) const
 Tries to resize a data source in case it's a resizable sequence. More...
 
base::AttributeBasebuildAlias (std::string name, base::DataSourceBase::shared_ptr b) const
 build an alias with b as the value. More...
 
base::PropertyBasebuildProperty (const std::string &name, const std::string &desc, base::DataSourceBase::shared_ptr source=0) const
 Build a Property of this type. More...
 
base::AttributeBasebuildAttribute (std::string name, base::DataSourceBase::shared_ptr source=0) const
 Build an Attribute of this type. More...
 
base::DataSourceBase::shared_ptr buildValue () const
 Build a internal::ValueDataSource of this type. More...
 
base::DataSourceBase::shared_ptr buildReference (void *ptr) const
 Build a internal::ReferenceDataSource of this type, pointing to the given pointer. More...
 
base::DataSourceBase::shared_ptr buildActionAlias (base::ActionInterface *action, base::DataSourceBase::shared_ptr source) const
 Returns a DataSource that first executes an action and returns the result of another data source. More...
 
Conversion to/from text

Used to convert data to human readable text and vice versa.

std::ostream & write (std::ostream &os, base::DataSourceBase::shared_ptr in) const
 Output this datasource as a human readable string. More...
 
std::istream & read (std::istream &os, base::DataSourceBase::shared_ptr out) const
 Read a new value for this datasource from a human readable string. More...
 
std::string toString (base::DataSourceBase::shared_ptr in) const
 Usability function which converts data to a string. More...
 
bool fromString (const std::string &value, base::DataSourceBase::shared_ptr out) const
 Usability function which converts a string to data. More...
 
bool isStreamable () const
 Returns true if this type is directly streamable using read()/write() or toString()/fromString(). More...
 
Inspecting data structures.

Used to write a complex type to an external representation, like XML.

std::vector< std::string > getMemberNames () const
 Returns the list of struct member names of this type. More...
 
base::DataSourceBase::shared_ptr getMember (base::DataSourceBase::shared_ptr item, const std::string &name) const
 Returns a member of a given data source struct identified by its name. More...
 
bool getMember (internal::Reference *ref, base::DataSourceBase::shared_ptr item, const std::string &name) const
 Stores a reference to a member of a struct identified by its name. More...
 
base::DataSourceBase::shared_ptr getMember (base::DataSourceBase::shared_ptr item, base::DataSourceBase::shared_ptr id) const
 Returns a reference to a member of a given data source struct identified by its name. More...
 
bool composeType (base::DataSourceBase::shared_ptr source, base::DataSourceBase::shared_ptr target) const
 Compose a type (target) from a DataSourceBase (source) containing its members. More...
 
base::DataSourceBase::shared_ptr decomposeType (base::DataSourceBase::shared_ptr source) const
 Specialize this function to return an alternate type which represents this one in a compatible way. More...
 
base::DataSourceBase::shared_ptr convertType (base::DataSourceBase::shared_ptr source) const
 Specialize this function to return an alternate type which represents this one in a compatible way. More...
 

Protected Types

typedef std::vector< TypeConstructor * > Constructors
 
typedef std::vector< TypeTransporter * > Transporters
 

Protected Attributes

Constructors constructors
 
Transporters transporters
 
std::vector< std::string > mtypenames
 
const char * mtid_name
 
TypeId mtid
 
boost::shared_ptr< internal::ConnFactorymconnf
 
boost::shared_ptr< MemberFactorymmembf
 
boost::shared_ptr< ValueFactorymdsf
 
boost::shared_ptr< CompositionFactorymcompf
 
boost::shared_ptr< StreamFactorymstrf
 

Detailed Description

A class for representing a user type, and which can build instances of that type.

Once you get hold of a TypeInfo object pointer, this pointer will be valid during the whole lifetime of the process.

Definition at line 67 of file TypeInfo.hpp.

Member Typedef Documentation

typedef std::vector<TypeConstructor*> RTT::types::TypeInfo::Constructors
protected

Definition at line 477 of file TypeInfo.hpp.

typedef std::vector<TypeTransporter*> RTT::types::TypeInfo::Transporters
protected

Definition at line 478 of file TypeInfo.hpp.

typedef const std::type_info* RTT::types::TypeInfo::TypeId

Definition at line 70 of file TypeInfo.hpp.

Constructor & Destructor Documentation

RTT::types::TypeInfo::TypeInfo ( const std::string &  name)
inline

Definition at line 72 of file TypeInfo.hpp.

RTT::TypeInfo::~TypeInfo ( )

Definition at line 56 of file TypeInfo.cpp.

Member Function Documentation

void RTT::TypeInfo::addAlias ( const std::string &  alias)

Adds an alias to the this type.

Parameters
aliasan alternative name for this type which will be returned in getTypeNames()

Definition at line 72 of file TypeInfo.cpp.

Referenced by RTT::types::TypeInfoRepository::addType().

void RTT::TypeInfo::addConstructor ( TypeConstructor tb)
bool RTT::TypeInfo::addProtocol ( int  protocol_id,
TypeTransporter tt 
)

Register a protocol for data transport over a network.

Definition at line 137 of file TypeInfo.cpp.

References RTT::Debug.

Referenced by RTT::mqueue::MQLibPlugin::registerTransport(), and RTT::corba::CorbaLibPlugin::registerTransport().

base::DataSourceBase::shared_ptr RTT::types::TypeInfo::buildActionAlias ( base::ActionInterface action,
base::DataSourceBase::shared_ptr  source 
) const
inline

Returns a DataSource that first executes an action and returns the result of another data source.

If source is an AssignableDataSource, an AssignableDataSource is returned of the same type, otherwise, a plain DataSource is returned.

Definition at line 248 of file TypeInfo.hpp.

Referenced by RTT::corba::CorbaOperationCallerFactory::produce().

base::AttributeBase* RTT::types::TypeInfo::buildAlias ( std::string  name,
base::DataSourceBase::shared_ptr  b 
) const
inline

build an alias with b as the value.

If b is of the wrong type, 0 will be returned..

Definition at line 206 of file TypeInfo.hpp.

Referenced by RTT::scripting::ValueChangeParser::ValueChangeParser().

base::AttributeBase* RTT::types::TypeInfo::buildAttribute ( std::string  name,
base::DataSourceBase::shared_ptr  source = 0 
) const
inline
base::ChannelElementBase::shared_ptr RTT::TypeInfo::buildChannelInput ( base::OutputPortInterface port,
ConnPolicy const &  policy 
) const

Definition at line 217 of file TypeInfo.cpp.

Referenced by RTT::corba::CDataFlowInterface_i::deregisterChannel().

base::ChannelElementBase::shared_ptr RTT::TypeInfo::buildChannelOutput ( base::InputPortInterface port,
ConnPolicy const &  policy 
) const

Definition at line 212 of file TypeInfo.cpp.

Referenced by RTT::corba::CDataFlowInterface_i::deregisterChannel().

base::AttributeBase* RTT::types::TypeInfo::buildConstant ( std::string  name,
base::DataSourceBase::shared_ptr  source,
int  sizehint 
) const
inline

Build a non modifyable instance of this type.

Parameters
sizehintFor variable size instances, use it to hint the size of the instance.

Definition at line 173 of file TypeInfo.hpp.

Referenced by RTT::corba::TaskContextProxy::synchronizeServices(), and RTT::scripting::ValueChangeParser::ValueChangeParser().

base::AttributeBase* RTT::types::TypeInfo::buildConstant ( std::string  name,
base::DataSourceBase::shared_ptr  source 
) const
inline

Build a non modifyable instance of this type.

Parameters
sizehintFor variable size instances, use it to hint the size of the instance.

Definition at line 178 of file TypeInfo.hpp.

base::ChannelElementBase::shared_ptr RTT::TypeInfo::buildDataStorage ( ConnPolicy const &  policy) const

Creates single data or buffered storage for this type.

Parameters
policyDescribes the kind of storage requested by the user
Returns
a storage element.

Definition at line 207 of file TypeInfo.cpp.

Referenced by RTT::corba::RemoteInputPort::buildRemoteChannelOutput(), RTT::mqueue::MQTemplateProtocolBase< T >::createStream(), and RTT::corba::CDataFlowInterface_i::deregisterChannel().

base::PropertyBase* RTT::types::TypeInfo::buildProperty ( const std::string &  name,
const std::string &  desc,
base::DataSourceBase::shared_ptr  source = 0 
) const
inline
base::DataSourceBase::shared_ptr RTT::types::TypeInfo::buildReference ( void *  ptr) const
inline

Build a internal::ReferenceDataSource of this type, pointing to the given pointer.

Definition at line 238 of file TypeInfo.hpp.

internal::SharedConnectionBase::shared_ptr RTT::TypeInfo::buildSharedConnection ( base::OutputPortInterface output_port,
base::InputPortInterface input_port,
ConnPolicy const &  policy 
) const

Definition at line 222 of file TypeInfo.cpp.

Referenced by RTT::corba::CDataFlowInterface_i::deregisterChannel().

base::DataSourceBase::shared_ptr RTT::types::TypeInfo::buildValue ( ) const
inline
base::AttributeBase * RTT::TypeInfo::buildVariable ( std::string  name,
int  sizehint 
) const

Build a modifyable instance of this type.

Parameters
sizehintFor variable size instances, use it to hint the size of the instance.

Definition at line 82 of file TypeInfo.cpp.

Referenced by RTT::scripting::ValueChangeParser::ValueChangeParser().

base::AttributeBase* RTT::types::TypeInfo::buildVariable ( std::string  name) const
inline

Build a non modifyable instance of this type.

Parameters
sizehintFor variable size instances, use it to hint the size of the instance.

Definition at line 188 of file TypeInfo.hpp.

bool RTT::types::TypeInfo::composeType ( base::DataSourceBase::shared_ptr  source,
base::DataSourceBase::shared_ptr  target 
) const
inline

Compose a type (target) from a DataSourceBase (source) containing its members.

The default behavior tries to assign source to target. If that fails, it tries to decompose target into its members and update the members of target with the contents of source.

The default implementation in TemplateTypeInfo works for most types, but can be overridden in case there are multiple versions/possibilities to make a target from a source. For example, in order to support legacy formats or in order to do the inverse of decomposeType().

Parameters
sourceA data source of the same type as target OR a PropertyBag that contains the parts of target to be refreshed.
targetA data source of the same type as this TypeInfo object which contains the data to be updated from source.
Returns
true if source could be updated, false otherwise.
See also
types::propertyDecomposition and types::typeDecomposition for the inverse function, decomposing a type into datasources and hierarchical properties.
decomposeType to do the inverse operation.

Definition at line 386 of file TypeInfo.hpp.

Referenced by RTT::types::composePropertyBag(), RTT::updateOrRefreshProperty(), and RTT::updateProperties().

DataSourceBase::shared_ptr RTT::TypeInfo::construct ( const std::vector< base::DataSourceBase::shared_ptr > &  args) const

Constructor syntax: construct a internal::DataSource which returns an instance of data depending on the given arguments.

When args is empty, the default 'variable' is returned.

Definition at line 87 of file TypeInfo.cpp.

References RTT::base::AttributeBase::getDataSource().

DataSourceBase::shared_ptr RTT::TypeInfo::convert ( base::DataSourceBase::shared_ptr  arg) const
base::DataSourceBase::shared_ptr RTT::types::TypeInfo::convertType ( base::DataSourceBase::shared_ptr  source) const
inline

Specialize this function to return an alternate type which represents this one in a compatible way.

For example, a short converts to an long or an enum to an int or a string.

Returns
null if this type is not convertible to anything else.
Deprecated:
by decomposeType. We want to rename convertType to decomposeType. This function is left here for transitional purposes.

Definition at line 414 of file TypeInfo.hpp.

base::DataSourceBase::shared_ptr RTT::types::TypeInfo::decomposeType ( base::DataSourceBase::shared_ptr  source) const
inline

Specialize this function to return an alternate type which represents this one in a compatible way.

For example, a short converts to an long or an enum to an int or a string. If your return a datasource containing a property bag, then this function should do the inverse of composeType: the returned property bag contains all parts of the current type (source) which can be modified and merged back into this type with composeType. Mathematically: composeType( decomposeType( A ), B); assert( A == B );

Returns
null in order to indicate that decomposition through getMember() may be tried. You may return source itself in order to prevent any further decomposition of your type (using getMember(), which is used as fall-back by the rest of the software. For example, to avoid that a string is decomposed into a sequence of chars, or to avoid that a primitive type like 'int' is further queried.

Definition at line 402 of file TypeInfo.hpp.

Referenced by RTT::base::PropertyBagVisitor::introspectAndDecompose().

bool RTT::types::TypeInfo::fromString ( const std::string &  value,
base::DataSourceBase::shared_ptr  out 
) const
inline

Usability function which converts a string to data.

Definition at line 299 of file TypeInfo.hpp.

CompositionFactoryPtr RTT::types::TypeInfo::getCompositionFactory ( ) const
inline

Definition at line 471 of file TypeInfo.hpp.

base::DataSourceBase::shared_ptr RTT::types::TypeInfo::getMember ( base::DataSourceBase::shared_ptr  item,
const std::string &  name 
) const
inline

Returns a member of a given data source struct identified by its name.

Parameters
itemThe item of which to return a reference to a member
nameThe name of a member within item. Is a name of a member in case of a struct or an index number in case of a sequence.
Returns
null if no such member exists, an assignable datasource referencing that member otherwise.

Definition at line 336 of file TypeInfo.hpp.

Referenced by RTT::base::DataSourceBase::getMember().

bool RTT::types::TypeInfo::getMember ( internal::Reference ref,
base::DataSourceBase::shared_ptr  item,
const std::string &  name 
) const
inline

Stores a reference to a member of a struct identified by its name.

This method does not allocate memory when item is assignable..

Parameters
refThe reference object in which to store the reference.
itemThe item of which to return a reference to a member. It must be assignable, otherwise, a reference to a copy of item will be returned. This copy will allocate memory.
nameThe name of a member within item.
Returns
false if no such member exists, true if ref got filled in otherwise.

Definition at line 350 of file TypeInfo.hpp.

base::DataSourceBase::shared_ptr RTT::types::TypeInfo::getMember ( base::DataSourceBase::shared_ptr  item,
base::DataSourceBase::shared_ptr  id 
) const
inline

Returns a reference to a member of a given data source struct identified by its name.

Parameters
itemThe item of which to return a reference to a member
nameThe name of a member within item. Is a name of a member in case of a struct or an index number in case of a sequence.
Returns
false if no such member exists, true if ref got filled in otherwise.

Definition at line 362 of file TypeInfo.hpp.

MemberFactoryPtr RTT::types::TypeInfo::getMemberFactory ( ) const
inline

Definition at line 463 of file TypeInfo.hpp.

std::vector<std::string> RTT::types::TypeInfo::getMemberNames ( ) const
inline

Returns the list of struct member names of this type.

In case this type is not a struct, returns an empty list.

Definition at line 324 of file TypeInfo.hpp.

Referenced by RTT::base::DataSourceBase::getMemberNames().

ConnFactoryPtr RTT::types::TypeInfo::getPortFactory ( ) const
inline

Definition at line 459 of file TypeInfo.hpp.

TypeTransporter * RTT::TypeInfo::getProtocol ( int  protocol_id) const
StreamFactoryPtr RTT::types::TypeInfo::getStreamFactory ( ) const
inline

Definition at line 475 of file TypeInfo.hpp.

std::vector< int > RTT::TypeInfo::getTransportNames ( ) const

Return a list of protocols that have transporters.

Definition at line 180 of file TypeInfo.cpp.

TypeId RTT::types::TypeInfo::getTypeId ( ) const
inline

Returns the compiler generated type id pointer.

Definition at line 108 of file TypeInfo.hpp.

const char* RTT::types::TypeInfo::getTypeIdName ( ) const
inline

Returns the compiler generated type name (non portable accross compilers!).

Definition at line 113 of file TypeInfo.hpp.

const std::string& RTT::types::TypeInfo::getTypeName ( ) const
inline
std::vector< std::string > RTT::TypeInfo::getTypeNames ( ) const

Returns all registered names and aliases of this type.

Definition at line 67 of file TypeInfo.cpp.

ValueFactoryPtr RTT::types::TypeInfo::getValueFactory ( ) const
inline

Definition at line 467 of file TypeInfo.hpp.

bool RTT::TypeInfo::hasProtocol ( int  protocol_id) const

Check if this type is transporable over a given protocol.

Definition at line 168 of file TypeInfo.cpp.

Referenced by RTT::corba::TaskContextProxy::synchronizePorts(), and RTT::corba::TaskContextProxy::synchronizeServices().

base::InputPortInterface * RTT::TypeInfo::inputPort ( std::string const &  name) const

Returns a new InputPort<T> object where T is the type represented by this TypeInfo object.

Definition at line 197 of file TypeInfo.cpp.

Referenced by RTT::corba::RemoteOutputPort::antiClone(), and RTT::corba::RemoteInputPort::clone().

bool RTT::types::TypeInfo::isStreamable ( ) const
inline

Returns true if this type is directly streamable using read()/write() or toString()/fromString().

Definition at line 308 of file TypeInfo.hpp.

bool RTT::TypeInfo::isType ( const std::string &  name)

Returns true if this type is known by the type system under the given name.

Parameters
type_namethe name to query for
Returns
true if this alias exists for this type.

Definition at line 78 of file TypeInfo.cpp.

base::OutputPortInterface * RTT::TypeInfo::outputPort ( std::string const &  name) const

Returns a new OutputPort<T> object where T is the type represented by this TypeInfo object.

Definition at line 202 of file TypeInfo.cpp.

Referenced by RTT::corba::RemoteInputPort::antiClone(), and RTT::corba::RemoteOutputPort::clone().

std::istream& RTT::types::TypeInfo::read ( std::istream &  os,
base::DataSourceBase::shared_ptr  out 
) const
inline

Read a new value for this datasource from a human readable string.

The default does nothing.

Definition at line 282 of file TypeInfo.hpp.

bool RTT::types::TypeInfo::resize ( base::DataSourceBase::shared_ptr  arg,
int  size 
) const
inline

Tries to resize a data source in case it's a resizable sequence.

Returns
true if the resizing could be done, false otherwise.

Definition at line 197 of file TypeInfo.hpp.

void RTT::types::TypeInfo::setCompositionFactory ( CompositionFactoryPtr  cf)
inline
void RTT::types::TypeInfo::setMemberFactory ( MemberFactoryPtr  mf)
inline
void RTT::types::TypeInfo::setPortFactory ( ConnFactoryPtr  cf)
inline

Installs a new port factory such that in-process data can be communicated between components.

Definition at line 457 of file TypeInfo.hpp.

Referenced by RTT::types::TemplateTypeInfo< T, false >::installTypeInfoObject().

void RTT::types::TypeInfo::setStreamFactory ( StreamFactoryPtr  sf)
inline
void RTT::types::TypeInfo::setTypeId ( TypeId  tid)
inline
void RTT::types::TypeInfo::setValueFactory ( ValueFactoryPtr  dsf)
inline
std::string RTT::types::TypeInfo::toString ( base::DataSourceBase::shared_ptr  in) const
inline

Usability function which converts data to a string.

Definition at line 291 of file TypeInfo.hpp.

std::ostream& RTT::types::TypeInfo::write ( std::ostream &  os,
base::DataSourceBase::shared_ptr  in 
) const
inline

Output this datasource as a human readable string.

The default just writes the type name in parentheses to os.

Definition at line 265 of file TypeInfo.hpp.

Member Data Documentation

Constructors RTT::types::TypeInfo::constructors
protected

Definition at line 479 of file TypeInfo.hpp.

boost::shared_ptr<CompositionFactory> RTT::types::TypeInfo::mcompf
protected

Definition at line 487 of file TypeInfo.hpp.

boost::shared_ptr<internal::ConnFactory> RTT::types::TypeInfo::mconnf
protected

Definition at line 484 of file TypeInfo.hpp.

boost::shared_ptr<ValueFactory> RTT::types::TypeInfo::mdsf
protected

Definition at line 486 of file TypeInfo.hpp.

boost::shared_ptr<MemberFactory> RTT::types::TypeInfo::mmembf
protected

Definition at line 485 of file TypeInfo.hpp.

boost::shared_ptr<StreamFactory> RTT::types::TypeInfo::mstrf
protected

Definition at line 488 of file TypeInfo.hpp.

TypeId RTT::types::TypeInfo::mtid
protected

Definition at line 483 of file TypeInfo.hpp.

const char* RTT::types::TypeInfo::mtid_name
protected

Definition at line 482 of file TypeInfo.hpp.

std::vector<std::string> RTT::types::TypeInfo::mtypenames
protected

Definition at line 481 of file TypeInfo.hpp.

Transporters RTT::types::TypeInfo::transporters
protected

Definition at line 480 of file TypeInfo.hpp.


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