SOFA API  c4ac86de
Open source framework for multi-physics simuation
sofa::core::objectmodel::Data< T > Class Template Reference

#include <Data.h>

Container that holds a variable for a component. More...

Inheritance diagram for sofa::core::objectmodel::Data< T >:

Detailed Description

template<class T = void*>
class sofa::core::objectmodel::Data< T >

Container that holds a variable for a component.

This is a fundamental class template in Sofa. Data are used to encapsulated member variables of Sofa components (i.e. classes that somehow inherit from Base) in order to access them dynamically and generically: briefly, Data can be retrieved at run-time by their name, and they can be assigned a value from a string, or be printed as a string.

More concretely, from the perspective of XML scene files, each Data declared in a component corresponds to an attribute of this component.

Example

If a component Foo has a boolean parameter bar, it does not simply declares it as bool m_bar, but rather like this:

Data<bool> d_bar;

Then, this Data must be initialized to provide its name and default value. This is typically done in the initialization list of each constructor of the component, using the helper function Base::initData():

Foo::Foo(): d_bar(initData(&d_bar, true, "bar", "Here is a little description of this Data.")) {
// ...
}

And this Data can be assigned a value in XML scene files like so:

1 <Foo bar="false"/>

Classes

class  InitData
 This internal class is used by the initData() methods to store initialization parameters of a Data. More...
 

Public Attributes

void * shared
 

Protected Attributes

helper::fixed_array< ValueType, SOFA_DATA_MAX_ASPECTSm_values
 Value. More...
 
- Protected Attributes inherited from sofa::core::objectmodel::TData< T >
SingleLink< TData< T >, TData< T >, BaseLink::FLAG_DATALINK|BaseLink::FLAG_DUPLICATEparentData
 
- Protected Attributes inherited from sofa::core::objectmodel::BaseData
std::string help {""}
 Help message. More...
 
std::string ownerClass {""}
 Owner class. More...
 
std::string group {""}
 group More...
 
std::string widget {""}
 widget More...
 
helper::fixed_array< int, SOFA_DATA_MAX_ASPECTSm_counters
 Number of changes since creation. More...
 
helper::fixed_array< bool, SOFA_DATA_MAX_ASPECTSm_isSets
 True if this Data is set, i.e. its value is different from the default value. More...
 
DataFlags m_dataFlags
 Flags indicating the purpose and behaviour of this Data. More...
 
Basem_owner {nullptr}
 Return the Base component owning this Data. More...
 
std::string m_name
 Data name within the Base component. More...
 
SingleLink< BaseData, BaseData, BaseLink::FLAG_STOREPATH|BaseLink::FLAG_DATALINK|BaseLink::FLAG_DUPLICATEparentBaseData
 Parent Data. More...
 
VecLink m_vecLink
 List of links. More...
 
- Protected Attributes inherited from sofa::core::objectmodel::DDGNode
DDGLink inputs
 
DDGLink outputs
 

Public Member Functions

bool operator== (const T &value) const
 
bool operator!= (const T &value) const
 
void operator= (const T &value)
 
Construction / destruction
virtual BaseDatagetNewInstance ()
 
 Data (const BaseData::BaseInitData &init)
 
 Data (const InitData &init)
 
 Data (const char *helpMsg=nullptr, bool isDisplayed=true, bool isReadOnly=false)
 
 Data (const std::string &helpMsg, bool isDisplayed=true, bool isReadOnly=false)
 
 Data (const T &value, const char *helpMsg=nullptr, bool isDisplayed=true, bool isReadOnly=false)
 
 Data (const T &value, const std::string &helpMsg, bool isDisplayed=true, bool isReadOnly=false)
 
virtual ~Data ()
 Destructor. More...
 
Simple edition and retrieval API
TbeginEdit (const core::ExecParams *params=nullptr)
 
TbeginWriteOnly (const core::ExecParams *params=nullptr)
 BeginEdit method if it is only to write the value. More...
 
void endEdit (const core::ExecParams *params=nullptr)
 
void setValue (const T &value)
 
void setValue (const core::ExecParams *params, const T &value)
 
const TgetValue (const core::ExecParams *params=nullptr) const
 
void copyAspect (int destAspect, int srcAspect)
 Copy the value of an aspect into another one. More...
 
void releaseAspect (int aspect)
 Release memory allocated for the specified aspect. More...
 
Virtual edition and retrieval API (for generic TData parent API, deprecated)
virtual const TvirtualGetValue () const
 
virtual void virtualSetValue (const T &v)
 
virtual void virtualSetLink (const BaseData &bd)
 
virtual TvirtualBeginEdit ()
 
virtual void virtualEndEdit ()
 
- Public Member Functions inherited from sofa::core::objectmodel::TData< T >
 TData (const BaseInitData &init)
 
 TData (const char *helpMsg=nullptr, bool isDisplayed=true, bool isReadOnly=false)
 
 TData (const std::string &helpMsg, bool isDisplayed=true, bool isReadOnly=false)
 
 ~TData () override
 
void printValue (std::ostream &out) const override
 General case for printing default value. More...
 
std::string getValueString () const override
 General case for printing default value. More...
 
std::string getValueTypeString () const override
 Get the name of the type of the value held in this Data. More...
 
const sofa::defaulttype::AbstractTypeInfogetValueTypeInfo () const override
 Get info about the value type of the associated variable. More...
 
const void * getValueVoidPtr () const override
 Get current value as a void pointer (use getValueTypeInfo to find how to access it) More...
 
void * beginEditVoidPtr () override
 Begin edit current value as a void pointer (use getValueTypeInfo to find how to access it) More...
 
void endEditVoidPtr () override
 End edit current value as a void pointer (use getValueTypeInfo to find how to access it) More...
 
virtual bool read (const std::string &s) override
 
bool isCounterValid () const override
 True if the counter of modification gives valid information. More...
 
bool copyValue (const TData< T > *parent)
 
bool copyValue (const BaseData *parent) override
 
bool validParent (BaseData *parent) override
 Check if a given Data can be linked as a parent of this data. More...
 
template<>
bool SOFA_CORE_API read (const std::string &str)
 Specialization for reading strings. More...
 
template<>
bool SOFA_CORE_API read (const std::string &str)
 Specialization for reading booleans. More...
 
template<>
bool read (const std::string &str)
 Specialization for reading strings. More...
 
template<>
bool read (const std::string &str)
 Specialization for reading booleans. More...
 
- Public Member Functions inherited from sofa::core::objectmodel::BaseData
 BaseData (const BaseInitData &init)
 
 BaseData (const std::string &helpMsg, DataFlags flags=FLAG_DEFAULT)
 
 BaseData (const char *helpMsg, DataFlags flags=FLAG_DEFAULT)
 
 BaseData (const std::string &helpMsg, bool isDisplayed=true, bool isReadOnly=false)
 
 BaseData (const char *helpMsg, bool isDisplayed=true, bool isReadOnly=false)
 
 ~BaseData () override
 Destructor. More...
 
const std::string & getHelp () const
 Get a help message that describes this Data. More...
 
void setHelp (const std::string &val)
 Set the help message. More...
 
const std::string & getOwnerClass () const
 Get owner class. More...
 
void setOwnerClass (const char *val)
 Set owner class. More...
 
const std::string & getGroup () const
 Get group. More...
 
void setGroup (const std::string &val)
 Set group. More...
 
const std::string & getWidget () const
 Get widget. More...
 
void setWidget (const char *val)
 Set widget. More...
 
std::string getLinkPath () const
 If we use the Data as a link and not as value directly. More...
 
virtual bool canBeLinked () const
 
BasegetOwner () const override
 Return the Base component owning this Data. More...
 
void setOwner (Base *o)
 Set the owner of this Data. More...
 
BaseDatagetData () const override
 This method is needed by DDGNode. More...
 
const std::string & getName () const override
 Return the name of this Data within the Base component. More...
 
void setName (const std::string &name)
 
bool setParent (BaseData *parent, const std::string &path=std::string())
 Link to a parent data. The value of this data will automatically duplicate the value of the parent data. More...
 
bool setParent (const std::string &path)
 
BaseDatagetParent () const
 
void update () override
 Update the value of this Data. More...
 
void setFlag (DataFlagsEnum flag, bool b)
 Set one of the flags. More...
 
bool getFlag (DataFlagsEnum flag) const
 Get one of the flags. More...
 
bool isDisplayed () const
 Return whether this Data has to be displayed in GUIs. More...
 
bool isReadOnly () const
 Return whether this Data will be read-only in GUIs. More...
 
bool isPersistent () const
 Return whether this Data contains persistent information. More...
 
bool isAutoLink () const
 Return whether this Data should be autolinked when using the src="" syntax. More...
 
bool isRequired () const
 Return whether the Data has to be set by the user for the owner component to be valid. More...
 
void setDisplayed (bool b)
 Set whether this Data should be displayed in GUIs. More...
 
void setReadOnly (bool b)
 Set whether this Data is read-only. More...
 
void setPersistent (bool b)
 Set whether this Data contains persistent information. More...
 
void setAutoLink (bool b)
 Set whether this data should be autolinked when using the src="" syntax. More...
 
void setRequired (bool b)
 Set whether the Data has to be set by the user for the owner component to be valid. More...
 
bool isSet (const core::ExecParams *params=nullptr) const
 
void unset (const core::ExecParams *params=nullptr)
 Reset the isSet flag to false, to indicate that the current value is the default for this Data. More...
 
void forceSet (const core::ExecParams *params=nullptr)
 Reset the isSet flag to true, to indicate that the current value has been modified. More...
 
int getCounter (const core::ExecParams *params=nullptr) const
 
const VecLinkgetLinks () const
 Accessor to the vector containing all the fields of this object. More...
 
virtual bool findDataLinkDest (DDGNode *&ptr, const std::string &path, const BaseLink *link) override
 
virtual bool findDataLinkDest (BaseData *&ptr, const std::string &path, const BaseLink *link)
 
template<class DataT >
bool findDataLinkDest (DataT *&ptr, const std::string &path, const BaseLink *link)
 
void addLink (BaseLink *l)
 Add a link. More...
 
- Public Member Functions inherited from sofa::core::objectmodel::DDGNode
 DDGNode ()
 Constructor. More...
 
virtual ~DDGNode ()
 Destructor. Automatically remove remaining links. More...
 
void addInput (DDGNode *n)
 Add a new input to this node. More...
 
void delInput (DDGNode *n)
 Remove an input from this node. More...
 
void addOutput (DDGNode *n)
 Add a new output to this node. More...
 
void delOutput (DDGNode *n)
 Remove an output from this node. More...
 
const DDGLinkContainergetInputs ()
 Get the list of inputs for this DDGNode. More...
 
const DDGLinkContainergetOutputs ()
 Get the list of outputs for this DDGNode. More...
 
bool isDirty (const core::ExecParams *params=nullptr) const
 Returns true if the DDGNode needs to be updated. More...
 
virtual void setDirtyValue (const core::ExecParams *params=nullptr)
 Indicate the value needs to be updated. More...
 
virtual void setDirtyOutputs (const core::ExecParams *params=nullptr)
 Indicate the outputs needs to be updated. This method must be called after changing the value of this node. More...
 
void cleanDirty (const core::ExecParams *params=nullptr)
 Set dirty flag to false. More...
 
virtual void notifyEndEdit (const core::ExecParams *params=0)
 Notify links that the DGNode has been modified. More...
 
void updateIfDirty (const core::ExecParams *params=nullptr) const
 Utility method to call update if necessary. This method should be called before reading of writing the value of this node. More...
 
void addLink (BaseLink *l)
 

Friends

std::ostream & operator<< (std::ostream &out, const Data &df)
 

Class reflection system

typedef TClass< Data< T >, TData< T > > MyClass
 
static const MyClassGetClass ()
 
static std::string templateName (const Data< T > *=nullptr)
 
virtual const BaseClassgetClass () const
 

Additional Inherited Members

- Static Public Member Functions inherited from sofa::core::objectmodel::TData< T >
static const MyClassGetClass ()
 
static std::string templateName (const TData< T > *=nullptr)
 
- Static Public Member Functions inherited from sofa::core::objectmodel::BaseData
template<class T >
static std::string typeName (const T *=nullptr)
 Helper method to get the type name of type T. More...
 
static const MyClassGetClass ()
 
- Static Public Member Functions inherited from sofa::core::objectmodel::DDGNode
static int currentAspect ()
 
static int currentAspect (const core::ExecParams *params)
 
static const MyClassGetClass ()
 
template<class T >
static void dynamicCast (T *&ptr, Base *)
 
template<class T >
static std::string typeName (const T *ptr=nullptr)
 
template<class T >
static std::string className (const T *ptr=nullptr)
 
template<class T >
static std::string namespaceName (const T *ptr=nullptr)
 
template<class T >
static std::string templateName (const T *ptr=nullptr)
 
template<class T >
static std::string shortName (const T *ptr=nullptr, BaseObjectDescription *=nullptr)
 
- Protected Member Functions inherited from sofa::core::objectmodel::TData< T >
BaseLink::InitLink< TData< T > > initLink (const char *name, const char *help)
 
void doSetParent (BaseData *parent) override
 
bool updateFromParentValue (const BaseData *parent) override
 Update this Data from the value of its parent. More...
 
- Protected Member Functions inherited from sofa::core::objectmodel::BaseData
void doDelInput (DDGNode *n) override
 
BaseLink::InitLink< BaseDatainitLink (const std::string &name, const std::string &help)
 
- Protected Member Functions inherited from sofa::core::objectmodel::DDGNode
BaseLink::InitLink< DDGNodeinitLink (const char *name, const char *help)
 
virtual void doAddInput (DDGNode *n)
 
virtual void doAddOutput (DDGNode *n)
 
virtual void doDelOutput (DDGNode *n)
 
void cleanDirtyOutputsOfInputs (const core::ExecParams *params)
 the dirtyOutputs flags of all the inputs will be set to false More...
 
- Static Protected Member Functions inherited from sofa::core::objectmodel::BaseData
static std::string decodeTypeName (const std::type_info &t)
 Helper method to decode the type name to a more readable form if possible. More...
 

Attribute details

template<class T = void*>
helper::fixed_array<ValueType, SOFA_DATA_MAX_ASPECTS> sofa::core::objectmodel::Data< T >::m_values
protected

Value.

template<class T = void*>
void* sofa::core::objectmodel::Data< T >::shared
mutable

Constructor details

template<class T = void*>
sofa::core::objectmodel::Data< T >::Data ( const BaseData< T >::BaseInitData< T > &  init)
inlineexplicit

Constructor used via the Base::initData() methods.

template<class T = void*>
sofa::core::objectmodel::Data< T >::Data ( const InitData< T > &  init)
inlineexplicit

Constructor used via the Base::initData() methods.

template<class T = void*>
sofa::core::objectmodel::Data< T >::Data ( const char *  helpMsg = nullptr,
bool  isDisplayed = true,
bool  isReadOnly = false 
)
inline

template<class T = void*>
sofa::core::objectmodel::Data< T >::Data ( const std::string &  helpMsg,
bool  isDisplayed = true,
bool  isReadOnly = false 
)
inline

template<class T = void*>
sofa::core::objectmodel::Data< T >::Data ( const T value,
const char *  helpMsg = nullptr,
bool  isDisplayed = true,
bool  isReadOnly = false 
)
inline

Parameters
valueThe default value.
template<class T = void*>
sofa::core::objectmodel::Data< T >::Data ( const T value,
const std::string &  helpMsg,
bool  isDisplayed = true,
bool  isReadOnly = false 
)
inline

Parameters
valueThe default value.
template<class T = void*>
virtual sofa::core::objectmodel::Data< T >::~Data ( )
inlinevirtual

Destructor.

Function details

template<class T = void*>
T* sofa::core::objectmodel::Data< T >::beginEdit ( const core::ExecParams params = nullptr)
inline
template<class T = void*>
T* sofa::core::objectmodel::Data< T >::beginWriteOnly ( const core::ExecParams params = nullptr)
inline

BeginEdit method if it is only to write the value.

template<class T = void*>
void sofa::core::objectmodel::Data< T >::copyAspect ( int  destAspect,
int  srcAspect 
)
inlinevirtual

Copy the value of an aspect into another one.

Implements sofa::core::objectmodel::BaseData.

template<class T = void*>
void sofa::core::objectmodel::Data< T >::endEdit ( const core::ExecParams params = nullptr)
inline
template<class T = void*>
static const MyClass* sofa::core::objectmodel::Data< T >::GetClass ( )
inlinestatic
template<class T = void*>
virtual const BaseClass* sofa::core::objectmodel::Data< T >::getClass ( ) const
inlinevirtual
template<class T = void*>
virtual BaseData* sofa::core::objectmodel::Data< T >::getNewInstance ( )
inlinevirtual

Reimplemented from sofa::core::objectmodel::BaseData.

template<class T = void*>
const T& sofa::core::objectmodel::Data< T >::getValue ( const core::ExecParams params = nullptr) const
inline
template<class T = void*>
bool sofa::core::objectmodel::Data< T >::operator!= ( const T value) const
inline
template<class T = void*>
void sofa::core::objectmodel::Data< T >::operator= ( const T value)
inline
template<class T = void*>
bool sofa::core::objectmodel::Data< T >::operator== ( const T value) const
inline
template<class T = void*>
void sofa::core::objectmodel::Data< T >::releaseAspect ( int  aspect)
inlinevirtual

Release memory allocated for the specified aspect.

Implements sofa::core::objectmodel::BaseData.

template<class T = void*>
void sofa::core::objectmodel::Data< T >::setValue ( const T value)
inline
Warning
writeOnly (the Data is not updated before being set)
template<class T = void*>
void sofa::core::objectmodel::Data< T >::setValue ( const core::ExecParams params,
const T value 
)
inline
Warning
writeOnly (the Data is not updated before being set)
template<class T = void*>
static std::string sofa::core::objectmodel::Data< T >::templateName ( const Data< T > *  = nullptr)
inlinestatic
template<class T = void*>
virtual T* sofa::core::objectmodel::Data< T >::virtualBeginEdit ( )
inlinevirtual
template<class T = void*>
virtual void sofa::core::objectmodel::Data< T >::virtualEndEdit ( )
inlinevirtual
template<class T = void*>
virtual const T& sofa::core::objectmodel::Data< T >::virtualGetValue ( ) const
inlinevirtual
template<class T = void*>
virtual void sofa::core::objectmodel::Data< T >::virtualSetLink ( const BaseData< T > &  bd)
inlinevirtual
template<class T = void*>
virtual void sofa::core::objectmodel::Data< T >::virtualSetValue ( const T v)
inlinevirtual

Related details

template<class T = void*>
std::ostream& operator<< ( std::ostream &  out,
const Data< T > &  df 
)
friend