33 #ifndef DART_COMMON_DETAIL_ASPECTWITHVERSION_HPP_
34 #define DART_COMMON_DETAIL_ASPECTWITHVERSION_HPP_
47 template <
class BaseT,
class DerivedT,
typename StateDataT,
49 void (*updateState)(DerivedT*) = &NoOp<DerivedT*> >
59 constexpr
static void (*UpdateState)(
Derived*) = updateState;
70 template <
typename... BaseArgs>
73 :
Base(
std::forward<BaseArgs>(args)...),
80 void setAspectState(
const Aspect::State& otherState)
override final;
86 void setState(const StateData& state);
89 const State& getState() const;
92 std::unique_ptr<
Aspect> cloneAspect() const override;
103 template <class BaseT, class DerivedT, typename PropertiesDataT,
105 void (*updateProperties)(DerivedT*) = &
NoOp<DerivedT*> >
115 constexpr
static void (*UpdateProperties)(
Derived*) = updateProperties;
128 template <
typename... BaseArgs>
131 :
Base(
std::forward<BaseArgs>(args)...),
153 std::
size_t incrementVersion();
157 void notifyPropertiesUpdate();
160 void notifyPropertiesUpdated();
176 template <class BaseT, class DerivedT, typename StateDataT,
177 class CompositeT,
void (*updateState)(DerivedT*)>
179 BaseT, DerivedT, StateDataT, CompositeT, updateState>::UpdateState)(
183 template <class BaseT, class DerivedT, typename StateDataT,
184 class CompositeT,
void (*updateState)(DerivedT*)>
185 AspectWithState<BaseT, DerivedT, StateDataT, CompositeT, updateState>::
194 template <
class BaseT,
class DerivedT,
typename StateData,
195 class CompositeT, void (*updateState)(DerivedT*)>
199 setState(
static_cast<const State&
>(otherState));
203 template <
class BaseT,
class DerivedT,
typename StateData,
204 class CompositeT, void (*updateState)(DerivedT*)>
207 getAspectState()
const
213 template <
class BaseT,
class DerivedT,
typename StateData,
214 class CompositeT, void (*updateState)(DerivedT*)>
219 UpdateState(
static_cast<Derived*
>(
this));
223 template <
class BaseT,
class DerivedT,
typename StateDataT,
224 class CompositeT, void (*updateState)(DerivedT*)>
226 getState()
const ->
const State&
232 template <
class BaseT,
class DerivedT,
typename StateData,
233 class CompositeT, void (*updateState)(DerivedT*)>
234 std::unique_ptr<Aspect>
238 return common::make_unique<Derived>(mState);
248 template <
class BaseT,
class DerivedT,
typename PropertiesDataT,
249 class CompositeT, void (*updateProperties)(DerivedT*)>
251 CompositeT, updateProperties>::
252 UpdateProperties)(DerivedT*);
255 template <
class BaseT,
class DerivedT,
typename PropertiesDataT,
256 class CompositeT, void (*updateProperties)(DerivedT*)>
258 CompositeT, updateProperties>::
267 template <
class BaseT,
class DerivedT,
typename PropertiesData,
268 class CompositeT, void (*updateProperties)(DerivedT*)>
270 CompositeT, updateProperties>::
273 setProperties(
static_cast<const Properties&
>(someProperties));
277 template <
class BaseT,
class DerivedT,
typename PropertiesData,
278 class CompositeT, void (*updateProperties)(DerivedT*)>
281 CompositeT, updateProperties>::
282 getAspectProperties()
const
288 template <
class BaseT,
class DerivedT,
typename PropertiesData,
289 class CompositeT, void (*updateProperties)(DerivedT*)>
291 CompositeT, updateProperties>::
295 this->notifyPropertiesUpdated();
299 template <
class BaseT,
class DerivedT,
typename PropertiesData,
300 class CompositeT, void (*updateProperties)(DerivedT*)>
302 CompositeT, updateProperties>::
309 template <
class BaseT,
class DerivedT,
typename PropertiesData,
310 class CompositeT, void (*updateProperties)(DerivedT*)>
311 std::unique_ptr<Aspect>
313 CompositeT, updateProperties>::
316 return common::make_unique<Derived>(mProperties);
320 template <
class BaseT,
class DerivedT,
typename PropertiesData,
321 class CompositeT, void (*updateProperties)(DerivedT*)>
323 CompositeT, updateProperties>::incrementVersion()
332 template <
class BaseT,
class DerivedT,
typename PropertiesData,
333 class CompositeT, void (*updateProperties)(DerivedT*)>
335 BaseT, DerivedT, PropertiesData,
336 CompositeT, updateProperties>::notifyPropertiesUpdate()
338 notifyPropertiesUpdated();
342 template <
class BaseT,
class DerivedT,
typename PropertiesData,
343 class CompositeT, void (*updateProperties)(DerivedT*)>
345 BaseT, DerivedT, PropertiesData,
346 CompositeT, updateProperties>::notifyPropertiesUpdated()
348 UpdateProperties(
static_cast<Derived*
>(
this));
349 this->incrementVersion();
#define DART_DEPRECATED(version)
Definition: Deprecated.hpp:51
BodyPropPtr properties
Definition: SdfParser.cpp:80
If your Aspect has Properties, then that Properties class should inherit this Aspect::Properties clas...
Definition: Aspect.hpp:83
If your Aspect has a State, then that State class should inherit this Aspect::State class.
Definition: Aspect.hpp:64
Definition: Aspect.hpp:47
Composite is a base class that should be virtually inherited by any class that wants to be able to ma...
Definition: Composite.hpp:52
The MakeCloneable class is used to easily create an Cloneable (such as Node::State) which simply take...
Definition: Cloneable.hpp:85
AspectWithProtectedState generates implementations of the State managing functions for an Aspect clas...
Definition: AspectWithVersion.hpp:51
CompositeT CompositeType
Definition: AspectWithVersion.hpp:57
AspectWithState(const StateData &state, BaseArgs &&... args)
Construct this Aspect and pass args into the constructor of the Base class.
Definition: AspectWithVersion.hpp:71
AspectWithState(const AspectWithState &)=delete
DerivedT Derived
Definition: AspectWithVersion.hpp:55
BaseT Base
Definition: AspectWithVersion.hpp:54
StateDataT StateData
Definition: AspectWithVersion.hpp:56
AspectWithState(const StateData &state=StateData())
Construct using a StateData instance.
AspectWithProtectedProperties generates implementations of the Property managing functions for an Asp...
Definition: AspectWithVersion.hpp:107
std::size_t incrementVersion()
Increment the version of this Aspect and its Composite.
Definition: AspectWithVersion.hpp:323
PropertiesDataT PropertiesData
Definition: AspectWithVersion.hpp:112
AspectWithVersionedProperties(const PropertiesData &properties, BaseArgs &&... args)
Construct this Aspect and pass args into the constructor of the Base class.
Definition: AspectWithVersion.hpp:129
const Aspect::Properties * getAspectProperties() const override final
Definition: AspectWithVersion.hpp:282
CompositeT CompositeType
Definition: AspectWithVersion.hpp:113
void setAspectProperties(const Aspect::Properties &someProperties) override final
Definition: AspectWithVersion.hpp:271
AspectWithVersionedProperties(const AspectWithVersionedProperties &)=delete
AspectWithVersionedProperties()=delete
AspectWithVersionedProperties(const PropertiesData &properties=PropertiesData())
Construct using a PropertiesData instance.
Definition: AspectWithVersion.hpp:259
DerivedT Derived
Definition: AspectWithVersion.hpp:111
BaseT Base
Definition: AspectWithVersion.hpp:110
void NoOp(Args...)
NoOp is short for "no operation".
Definition: NoOp.hpp:44
constexpr void(* AspectWithVersionedProperties)(DerivedT *)
Definition: AspectWithVersion.hpp:252
Definition: BulletCollisionDetector.cpp:63
Definition: SharedLibraryManager.hpp:43