17#ifndef AGX_INTERNALDATA_H
18#define AGX_INTERNALDATA_H
60 template<
typename DataT,
typename ObjT,
typename... Args>
61 static DataT* getOrCreate( ObjT obj, Source source, Args&&... args );
70 template<
typename DataT,
typename ObjT>
71 static DataT* get(
const ObjT& obj, Source source );
79 template<
typename ObjT>
85 template<
typename ObjT>
86 static agx::Bool hasData(
const ObjT& obj, Source source );
98 template<
typename ObjT>
104 template<
typename ObjT>
111 template<
typename DataT,
typename ObjT,
typename... Args>
117 if ( iData->m_data[ source ] ==
nullptr )
118 iData->m_data[ source ] =
new DataT( std::forward<Args>( args )... );
120 return iData->m_data[ source ]->
as<DataT>();
123 template<
typename DataT,
typename ObjT>
127 return iData !=
nullptr && iData->m_data[ source ] !=
nullptr ? iData->m_data[ source ]->
as<DataT>() :
nullptr;
130 template<
typename ObjT>
133 if ( obj ==
nullptr )
137 if ( iData ==
nullptr && data ==
nullptr )
140 iData = getOrCreateInternal( obj );
141 iData->m_data[ source ] = data;
144 template<
typename ObjT>
148 return iData !=
nullptr && iData->m_data[ source ] !=
nullptr;
151 template<
typename ObjT>
152 InternalData* InternalData::getOrCreateInternal( ObjT obj )
155 if ( data ==
nullptr ) {
157 obj->setInternalData( data );
160 return data->
as<InternalData>();
163 template<
typename ObjT>
164 InternalData* InternalData::getInternal(
const ObjT& obj )
166 return obj !=
nullptr && obj->getInternalData() !=
nullptr ? obj->getInternalData()->template as<InternalData>() : nullptr;
#define AGXPHYSICS_EXPORT
Internal data for any object, ObjT, with methods: agx::Referenced* ObjT::getInternalData() const; voi...
static DataT * getOrCreate(ObjT obj, Source source, Args &&... args)
Get already created data or create new instance of the internal data.
static agx::Bool hasData(const ObjT &obj, Source source)
static DataT * get(const ObjT &obj, Source source)
Get already created data of the internal data.
static void set(ObjT obj, agx::Referenced *data, Source source)
Assign data to source.
Source
Source of internal data.
@ SENSOR_ENVIRONMENT
Sensor environment data.
@ LINKED_STRUCTURE
Tracked vehicle related data.
@ RIGID_BODY_EMITTER
Rigid Body data.
@ WIRE
Maps geometries and rigid bodies back to wires and wire nodes.
@ MERGED_BODY
Merged states, neighbors etc.
@ ENERGY
Energy related data.
@ MERGE_SPLIT
AMOR related data.
@ DEFORMABLE1D
Deformable1d related data.
virtual ~InternalData()
Reference counted object, protected destructor.
Base class providing referencing counted objects.
T * as()
Subclass casting.
Smart pointer for handling referenced counted objects.
The agx namespace contains the dynamics/math part of the AGX Dynamics API.