AGX Dynamics 2.42.3.0
Loading...
Searching...
No Matches
TaskTimingEntity.h
Go to the documentation of this file.
1/*
2Copyright 2007-2025. Algoryx Simulation AB.
3
4All AGX source code, intellectual property, documentation, sample code,
5tutorials, scene files and technical white papers, are copyrighted, proprietary
6and confidential material of Algoryx Simulation AB. You may not download, read,
7store, distribute, publish, copy or otherwise disseminate, use or expose this
8material unless having a written signed agreement with Algoryx Simulation AB, or
9having been advised so by Algoryx Simulation AB for a time limited evaluation,
10or having purchased a valid commercial license from Algoryx Simulation AB.
11
12Algoryx Simulation AB disclaims all responsibilities for loss or damage caused
13from using this software, unless otherwise stated in written agreements with
14Algoryx Simulation AB.
15*/
16
18// AUTOMATICALLY GENERATED ENTITY, DO NOT EDIT! //
20
21#ifndef GENERATED_AGX_TASKTIMING_H_PLUGIN
22#define GENERATED_AGX_TASKTIMING_H_PLUGIN
23
24#define AGX_ENTITY_WRAPPER 1
25
26
27#ifdef _MSC_VER
28# pragma warning(push)
29// warning C4505: 'agxData::VectorAttributeT<T>::print' : unreferenced local function has been removed
30# pragma warning( disable : 4505 )
31// warning C4251: 'X' : class 'Y' needs to have dll-interface to be used by clients of class 'Z'
32# pragma warning( disable : 4251 )
33// warning C4355: 'this' : used in base member initializer list
34# pragma warning( disable : 4355 )
35// marked as __forceinline not inlined
36# pragma warning( disable: 4714 )
37#endif
38
39#include <agxData/EntityModel.h>
41#include <agxData/EntityRef.h>
42#include <agxData/EntityPtr.h>
44#include <agx/Integer.h>
45#include <agx/Real.h>
46#include <agx/macros.h>
47#include <agx/Name.h>
48#include <agx/Integer.h>
49#include <agx/Real.h>
50
51
52namespace agx
53{
54
55 class TaskTimingModel;
56 class TaskTimingData;
57 class TaskTimingPtr;
58 class TaskTimingInstance;
59 class TaskTimingSemantics;
60
61
63
68 {
69 public:
71
72 TaskTimingModel(const agx::String& name = "TaskTiming");
73
76
79
82
84 virtual void shutdownCleanup() override;
85
86
87
88 /* Attributes */
95
96 protected:
98 virtual agxData::EntityData* createData(agxData::EntityStorage* storage) override;
99 virtual void configure(agx::TiXmlElement* eEntity) override;
100 virtual void initAttributeAccessors() override;
101 virtual void construct(agxData::EntityPtr instance) override;
103 };
104
105
107 #ifndef AGX_TASKTIMING_DATA_SET_OVERRIDE
108 #define AGX_TASKTIMING_DATA_SET
109 class AGXPHYSICS_EXPORT TaskTimingData : public agxData::EntityData
110 {
111 public:
112 TaskTimingInstance operator[] (size_t index);
113
114 public:
117 agxData::Array< agx::Name > implementation;
118 agxData::Array< agx::UInt > numSubtasks;
122
123 public:
124 typedef agx::Name nameType;
125 typedef agx::Name implementationType;
126 typedef agx::UInt numSubtasksType;
127 typedef agx::Real64 wallTimeType;
128 typedef agx::Real64 computeCostType;
129 typedef agx::Real64 overheadTimeType;
130
131 public:
132 TaskTimingData(agxData::EntityStorage* storage);
133 TaskTimingData();
134
135 protected:
136 virtual ~TaskTimingData() {}
137 virtual void setNumElements(agx::Index numElements) override;
138
139 private:
140 TaskTimingData& operator= (const TaskTimingData&) { return *this; }
141
142 };
143 #endif
145
146
148 class AGXPHYSICS_EXPORT TaskTimingSemantics : protected agxData::EntityPtr
149 {
150 public:
151
152 // Automatic getters
153 agx::Name const& getName() const;
154 agx::Name const& getImplementation() const;
155 agx::UInt const& getNumSubtasks() const;
156 agx::Real64 const& getWallTime() const;
157 agx::Real64 const& getComputeCost() const;
158 agx::Real64 const& getOverheadTime() const;
159
160 // Semantics defined by explicit kernels
161
162 // Automatic setters
163 void setName(agx::Name const& value);
164 void setImplementation(agx::Name const& value);
165 void setNumSubtasks(agx::UInt const& value);
166 void setWallTime(agx::Real64 const& value);
167 void setComputeCost(agx::Real64 const& value);
168 void setOverheadTime(agx::Real64 const& value);
169
170
171 protected:
172 friend class TaskTimingPtr;
173 friend class TaskTimingInstance;
174 TaskTimingSemantics();
175 };
177
178
179
182 class CALLABLE TaskTimingPtr : public agxData::EntityPtr
183 {
184 public:
186 typedef TaskTimingData DataType;
187 typedef TaskTimingInstance InstanceType;
188
189 public:
196 AGXPHYSICS_EXPORT TaskTimingInstance instance();
197 AGXPHYSICS_EXPORT const TaskTimingInstance instance() const;
198
199 AGXPHYSICS_EXPORT TaskTimingSemantics* operator->();
200 AGXPHYSICS_EXPORT const TaskTimingSemantics* operator->() const;
201
202 TaskTimingData* getData();
203 const TaskTimingData* getData() const;
204
205
210
215
220
225
230
235
236 };
237
238
240 class AGXPHYSICS_EXPORT TaskTimingInstance : public agxData::EntityInstance
241 {
242 public:
243 TaskTimingInstance();
244 TaskTimingInstance(TaskTimingData* data, agx::Index index);
245 TaskTimingInstance(agxData::EntityStorage *storage, agx::Index index);
246 TaskTimingInstance(const agxData::EntityInstance& other);
247 TaskTimingInstance(const agxData::EntityPtr& ptr);
248
249 TaskTimingData* getData();
250 const TaskTimingData* getData() const;
251
252 public:
254 agx::Name& name();
256 agx::Name const& name() const;
257
259 agx::Name& implementation();
261 agx::Name const& implementation() const;
262
264 agx::UInt& numSubtasks();
266 agx::UInt const& numSubtasks() const;
267
269 agx::Real64& wallTime();
271 agx::Real64 const& wallTime() const;
272
274 agx::Real64& computeCost();
276 agx::Real64 const& computeCost() const;
277
279 agx::Real64& overheadTime();
281 agx::Real64 const& overheadTime() const;
282
283 };
285
286
287
290
291
292
294 /* Implementation */
295 //-----------------------------------------------------------------------------------------------------
296 //-----------------------------------------------------------------------------------------------------
297 inline TaskTimingInstance agx::TaskTimingData::operator[] (size_t index) { return TaskTimingInstance(this, (agx::Index)index); }
298 //-----------------------------------------------------------------------------------------------------
301 AGX_FORCE_INLINE TaskTimingPtr::TaskTimingPtr(const agxData::EntityPtr& ptr) : agxData::EntityPtr(ptr)
302 {
304 "Entity type mismatch. Storage contains entity data for type \'%s\', instance pointer is of type \'%s\'",
305 EntityPtr::getModel()->fullPath().c_str(), TaskTimingModel::instance()->fullPath().c_str());
306 }
307
308 AGX_FORCE_INLINE TaskTimingPtr::TaskTimingPtr(const agxData::EntityInstance& instance) : agxData::EntityPtr(instance)
309 {
310 agxAssertN(!instance || instance.isInstanceOf(TaskTimingModel::instance()),
311 "Entity type mismatch. Storage contains entity data for type \'%s\', instance pointer is of type \'%s\'",
312 EntityPtr::getModel()->fullPath().c_str(), TaskTimingModel::instance()->fullPath().c_str());
313 }
314
315 AGX_FORCE_INLINE TaskTimingPtr& TaskTimingPtr::operator= (const agxData::EntityPtr& ptr)
316 {
318 agxAssertN(!ptr || ptr.isInstanceOf(TaskTimingModel::instance()),
319 "Entity type mismatch. Storage contains entity data for type \'%s\', instance pointer is of type \'%s\'",
320 EntityPtr::getModel()->fullPath().c_str(), TaskTimingModel::instance()->fullPath().c_str());
321 return *this;
322 }
323
324 AGX_FORCE_INLINE TaskTimingPtr& TaskTimingPtr::operator= (const agxData::EntityInstance& instance)
325 {
327 agxAssertN(!instance || instance.isInstanceOf(TaskTimingModel::instance()),
328 "Entity type mismatch. Storage contains entity data for type \'%s\', instance pointer is of type \'%s\'",
329 EntityPtr::getModel()->fullPath().c_str(), TaskTimingModel::instance()->fullPath().c_str());
330 return *this;
331 }
332
333 inline TaskTimingInstance TaskTimingPtr::instance() { return agxData::EntityPtr::instance(); }
334 inline const TaskTimingInstance TaskTimingPtr::instance() const { return agxData::EntityPtr::instance(); }
335 AGX_FORCE_INLINE TaskTimingSemantics* TaskTimingPtr::operator->() { return (TaskTimingSemantics* )this; }
336 AGX_FORCE_INLINE const TaskTimingSemantics* TaskTimingPtr::operator->() const { return (const TaskTimingSemantics* )this; }
337 AGX_FORCE_INLINE TaskTimingData* TaskTimingPtr::getData() { return static_cast<TaskTimingData* >(agxData::EntityPtr::getData()); }
338 AGX_FORCE_INLINE const TaskTimingData* TaskTimingPtr::getData() const { return static_cast<const TaskTimingData* >(agxData::EntityPtr::getData()); }
339
340 AGX_FORCE_INLINE agx::Name& TaskTimingPtr::name() { verifyIndex(); return getData()->name[calculateIndex()]; }
341 AGX_FORCE_INLINE agx::Name const& TaskTimingPtr::name() const { verifyIndex(); return getData()->name[calculateIndex()]; }
342
343 AGX_FORCE_INLINE agx::Name& TaskTimingPtr::implementation() { verifyIndex(); return getData()->implementation[calculateIndex()]; }
344 AGX_FORCE_INLINE agx::Name const& TaskTimingPtr::implementation() const { verifyIndex(); return getData()->implementation[calculateIndex()]; }
345
346 AGX_FORCE_INLINE agx::UInt& TaskTimingPtr::numSubtasks() { verifyIndex(); return getData()->numSubtasks[calculateIndex()]; }
347 AGX_FORCE_INLINE agx::UInt const& TaskTimingPtr::numSubtasks() const { verifyIndex(); return getData()->numSubtasks[calculateIndex()]; }
348
349 AGX_FORCE_INLINE agx::Real64& TaskTimingPtr::wallTime() { verifyIndex(); return getData()->wallTime[calculateIndex()]; }
350 AGX_FORCE_INLINE agx::Real64 const& TaskTimingPtr::wallTime() const { verifyIndex(); return getData()->wallTime[calculateIndex()]; }
351
352 AGX_FORCE_INLINE agx::Real64& TaskTimingPtr::computeCost() { verifyIndex(); return getData()->computeCost[calculateIndex()]; }
353 AGX_FORCE_INLINE agx::Real64 const& TaskTimingPtr::computeCost() const { verifyIndex(); return getData()->computeCost[calculateIndex()]; }
354
355 AGX_FORCE_INLINE agx::Real64& TaskTimingPtr::overheadTime() { verifyIndex(); return getData()->overheadTime[calculateIndex()]; }
356 AGX_FORCE_INLINE agx::Real64 const& TaskTimingPtr::overheadTime() const { verifyIndex(); return getData()->overheadTime[calculateIndex()]; }
357
358 //-----------------------------------------------------------------------------------------------------
359 AGX_FORCE_INLINE TaskTimingInstance::TaskTimingInstance() {}
360 AGX_FORCE_INLINE TaskTimingInstance::TaskTimingInstance(TaskTimingData* data, agx::Index index) : agxData::EntityInstance(data, index) {}
361 AGX_FORCE_INLINE TaskTimingInstance::TaskTimingInstance(agxData::EntityStorage* storage, agx::Index index) : agxData::EntityInstance(storage, index) {}
362 AGX_FORCE_INLINE TaskTimingInstance::TaskTimingInstance(const agxData::EntityInstance& other) : agxData::EntityInstance(other)
363 {
365 "Entity type mismatch. Storage contains entity data for type \'%s\', instance pointer is of type \'%s\'",
366 EntityInstance::getModel()->fullPath().c_str(), TaskTimingModel::instance()->fullPath().c_str());
367 }
368
369 AGX_FORCE_INLINE TaskTimingInstance::TaskTimingInstance(const agxData::EntityPtr& ptr) : agxData::EntityInstance(ptr)
370 {
372 "Entity type mismatch. Storage contains entity data for type \'%s\', instance pointer is of type \'%s\'",
373 EntityInstance::getModel()->fullPath().c_str(), TaskTimingModel::instance()->fullPath().c_str());
374 }
375
376
377 AGX_FORCE_INLINE TaskTimingData* TaskTimingInstance::getData() { return static_cast<TaskTimingData* >(agxData::EntityInstance::getData()); }
378 AGX_FORCE_INLINE const TaskTimingData* TaskTimingInstance::getData() const { return static_cast<const TaskTimingData* >(agxData::EntityInstance::getData()); }
379
380 AGX_FORCE_INLINE agx::Name& TaskTimingInstance::name() { verifyIndex(); return getData()->name[getIndex()]; }
381 AGX_FORCE_INLINE agx::Name const& TaskTimingInstance::name() const { verifyIndex(); return getData()->name[getIndex()]; }
382
383 AGX_FORCE_INLINE agx::Name& TaskTimingInstance::implementation() { verifyIndex(); return getData()->implementation[getIndex()]; }
384 AGX_FORCE_INLINE agx::Name const& TaskTimingInstance::implementation() const { verifyIndex(); return getData()->implementation[getIndex()]; }
385
386 AGX_FORCE_INLINE agx::UInt& TaskTimingInstance::numSubtasks() { verifyIndex(); return getData()->numSubtasks[getIndex()]; }
387 AGX_FORCE_INLINE agx::UInt const& TaskTimingInstance::numSubtasks() const { verifyIndex(); return getData()->numSubtasks[getIndex()]; }
388
389 AGX_FORCE_INLINE agx::Real64& TaskTimingInstance::wallTime() { verifyIndex(); return getData()->wallTime[getIndex()]; }
390 AGX_FORCE_INLINE agx::Real64 const& TaskTimingInstance::wallTime() const { verifyIndex(); return getData()->wallTime[getIndex()]; }
391
392 AGX_FORCE_INLINE agx::Real64& TaskTimingInstance::computeCost() { verifyIndex(); return getData()->computeCost[getIndex()]; }
393 AGX_FORCE_INLINE agx::Real64 const& TaskTimingInstance::computeCost() const { verifyIndex(); return getData()->computeCost[getIndex()]; }
394
395 AGX_FORCE_INLINE agx::Real64& TaskTimingInstance::overheadTime() { verifyIndex(); return getData()->overheadTime[getIndex()]; }
396 AGX_FORCE_INLINE agx::Real64 const& TaskTimingInstance::overheadTime() const { verifyIndex(); return getData()->overheadTime[getIndex()]; }
397
398 //-----------------------------------------------------------------------------------------------------
399 AGX_FORCE_INLINE TaskTimingSemantics::TaskTimingSemantics() {}
400 //-----------------------------------------------------------------------------------------------------
402}
403
404AGX_TYPE_BINDING(agx::TaskTimingPtr, "TaskTimingPtr")
405AGX_TYPE_BINDING(agx::TaskTimingInstance, "TaskTimingInstance")
406
407#ifdef _MSC_VER
408# pragma warning(pop)
409#endif
410
411#undef AGX_ENTITY_WRAPPER
412#undef AGX_ENTITY_NAMESPACE
413#endif
414
#define AGX_DECLARE_POINTER_TYPES(type)
Definition: Referenced.h:254
#define AGX_TYPE_BINDING(_Type, _Name)
Definition: Type.h:179
#define AGXPHYSICS_EXPORT
Type-specific Array used for fast access into the data held by a Buffer.
Definition: Array.h:107
Entity instance provides access to a single instance in an EntityStorage.
bool isInstanceOf(agxData::EntityModel *model) const
agxData::EntityData * getData()
An abstract description of a data entity stored using SOA (structure of arrays) pattern in a EntitySt...
Definition: EntityModel.h:64
Accessor to a entity instance stored in a EntityStorage, to allow SOA (structure of arrays) data to b...
Definition: EntityPtr.h:52
EntityPtr & operator=(const EntityPtr &other)=default
bool isInstanceOf(agxData::EntityModel *model) const
agxData::EntityData * getData()
agxData::EntityInstance instance()
Definition: EntityPtr.h:269
Data storage for a collection of entity instances of a specified EntityModel.
Definition: EntityStorage.h:73
agx::String fullPath() const
Representation of a name string.
Definition: Name.h:33
Abstract description of the data attributes for the TaskTiming entity.
static agxData::ScalarAttributeT< agx::Name > * implementationAttribute
virtual agxData::EntityData * createData(agxData::EntityStorage *storage) override
static agxData::EntityStorage * defaultStorage()
static agxData::ScalarAttributeT< agx::Real64 > * computeCostAttribute
virtual void configure(agx::TiXmlElement *eEntity) override
TaskTimingModel(const agx::String &name="TaskTiming")
virtual void initAttributeAccessors() override
static TaskTimingPtr createInstance()
Create and return a pointer to a new instance in the default storage for this entity model.
static agxData::ScalarAttributeT< agx::Real64 > * wallTimeAttribute
virtual void construct(agxData::EntityPtr instance) override
static agxData::ScalarAttributeT< agx::UInt > * numSubtasksAttribute
virtual void shutdownCleanup() override
This is part of internal cleanup and should not be called by users.
static agxData::ScalarAttributeT< agx::Name > * nameAttribute
static agxData::ScalarAttributeT< agx::Real64 > * overheadTimeAttribute
void construct(agx::TaskTimingPtr taskTiming)
virtual ~TaskTimingModel()
static TaskTimingModel * instance()
Pointer to a entity instance of type TaskTiming.
TaskTimingData * getData()
AGXPHYSICS_EXPORT TaskTimingInstance instance()
AGXPHYSICS_EXPORT TaskTimingPtr(const agxData::EntityInstance &instance)
AGXPHYSICS_EXPORT TaskTimingPtr(const agxData::EntityPtr &ptr)
AGXPHYSICS_EXPORT agx::Real64 & computeCost()
AGXPHYSICS_EXPORT const TaskTimingInstance instance() const
AGXPHYSICS_EXPORT agx::Name const & name() const
AGXPHYSICS_EXPORT agx::Real64 & overheadTime()
AGXPHYSICS_EXPORT agx::Name & implementation()
AGXPHYSICS_EXPORT const TaskTimingSemantics * operator->() const
TaskTimingInstance InstanceType
AGXPHYSICS_EXPORT agx::Real64 & wallTime()
AGXPHYSICS_EXPORT agx::UInt & numSubtasks()
AGXPHYSICS_EXPORT TaskTimingPtr()
AGXPHYSICS_EXPORT agx::Real64 const & wallTime() const
AGXPHYSICS_EXPORT agx::Real64 const & computeCost() const
AGXPHYSICS_EXPORT agx::UInt const & numSubtasks() const
AGXPHYSICS_EXPORT TaskTimingPtr(agxData::EntityStorage *storage, agx::Index id)
AGXPHYSICS_EXPORT agx::Name & name()
AGXPHYSICS_EXPORT agx::Real64 const & overheadTime() const
TaskTimingData DataType
const TaskTimingData * getData() const
AGXPHYSICS_EXPORT agx::Name const & implementation() const
TaskTimingModel ModelType
AGXPHYSICS_EXPORT TaskTimingSemantics * operator->()
Vector containing 'raw' data.
Definition: agx/Vector.h:246
#define agxAssertN(expr, format,...)
Definition: debug.h:145
#define DOXYGEN_END_INTERNAL_BLOCK()
Definition: macros.h:89
#define CALLABLE
Definition: macros.h:72
#define DOXYGEN_START_INTERNAL_BLOCK()
Definition: macros.h:88
#define AGX_FORCE_INLINE
Definition: macros.h:58
Contains classes for low level data storage for AGX.
Definition: Container.h:23
The agx namespace contains the dynamics/math part of the AGX Dynamics API.
double Real64
Definition: Real.h:44
uint64_t UInt
Definition: Integer.h:27
UInt32 Index
Definition: Integer.h:44