PeriDyno 1.0.0
Loading...
Searching...
No Matches
Object.h
Go to the documentation of this file.
1
16#pragma once
17#include <string>
18#include <atomic>
19#include <map>
20
21namespace dyno
22{
23class Object;
24class ClassInfo;
25
26
27typedef Object* (*ObjectConstructorFn)(void);
28bool Register(ClassInfo* ci);
29
31{
32public:
33 ClassInfo(const std::string className, ObjectConstructorFn ctor)
34 :m_className(className), m_objectConstructor(ctor)
35 {
36 Register(this);
37 }
38 virtual ~ClassInfo() {}
39
40 inline bool operator==(const ClassInfo &ci) const
41 {
42
43 if (this->m_className == ci.m_className)
44 return true;
45 return false;
46 }
47
49 {
50 return m_objectConstructor ? (*m_objectConstructor)() : 0;
51 }
52
53 bool isDynamic()const
54 {
55 return NULL != m_objectConstructor;
56 }
57 const std::string getClassName()const { return m_className; }
58
60public:
61 std::string m_className;
63};
64
65#define DECLARE_CLASS(name) \
66public: \
67 static const ClassInfo* ms_classinfo; \
68public: \
69 virtual const ClassInfo* getClassInfo() const; \
70 static Object* createObject();
71
72
73#define IMPLEMENT_CLASS_COMMON(name,func) \
74const ClassInfo* name::ms_classinfo = new ClassInfo((#name), (ObjectConstructorFn) func); \
75 \
76const ClassInfo* name::getClassInfo() const \
77 {return name::ms_classinfo;}
78
79#define IMPLEMENT_CLASS(name) \
80IMPLEMENT_CLASS_COMMON(name,name::createObject) \
81Object* name::createObject() \
82 { return new name;}
83
84
85#define _STR(s) #s
86
87#define DECLARE_TCLASS(name, T1) \
88public: \
89 static const ClassInfo ms_classinfo; \
90public: \
91 virtual const ClassInfo* getClassInfo() const; \
92 static Object* createObject();
93
94#define IMPLEMENT_CLASS_COMMON_1(name, T1, func) \
95template<typename T1> \
96const ClassInfo name<T1>::ms_classinfo(std::string(_STR(name)).append("<").append(T1::getName()).append(">"), \
97 (ObjectConstructorFn) func); \
98 \
99template<typename T1> \
100const ClassInfo* name<T1>::getClassInfo() const \
101 {return &name<T1>::ms_classinfo;}
102
103#define IMPLEMENT_TCLASS(name, T1) \
104IMPLEMENT_CLASS_COMMON_1(name, T1, name<T1>::createObject) \
105 \
106template<typename T1> \
107Object* name<T1>::createObject() \
108 { return new name<T1>;}
109
110typedef uint32_t ObjectId;
111
113{
115public:
116 Object();
117 virtual ~Object() {};
118 static bool registerClass(ClassInfo* ci);
119 static Object* createObject(std::string name);
120 static std::map< std::string, ClassInfo*>* getClassMap();
121
127 static ObjectId baseId();
128
129 ObjectId objectId() { return id; }
130private:
132
133 static uint32_t generateObjectId();
134 static std::atomic_uint32_t cId;
135};
136
137#ifdef PRECISION_FLOAT
138#define DEFINE_CLASS(name) template class name<DataType3f>;
139#else
140#define DEFINE_CLASS(name) template class name<DataType3d>;
141#endif
142
143#define DEFINE_UNIQUE_CLASS(name, type) template class name<type>;
144}
#define DECLARE_CLASS(name)
Definition Object.h:65
bool isDynamic() const
Definition Object.h:53
ObjectConstructorFn getConstructor() const
Definition Object.h:59
std::string m_className
Definition Object.h:61
ClassInfo(const std::string className, ObjectConstructorFn ctor)
Definition Object.h:33
const std::string getClassName() const
Definition Object.h:57
ObjectConstructorFn m_objectConstructor
Definition Object.h:62
Object * createObject() const
Definition Object.h:48
bool operator==(const ClassInfo &ci) const
Definition Object.h:40
virtual ~ClassInfo()
Definition Object.h:38
static std::map< std::string, ClassInfo * > * getClassMap()
Definition Object.cpp:41
static ObjectId baseId()
Base Id.
Definition Object.cpp:46
static Object * createObject(std::string name)
Definition Object.cpp:32
ObjectId objectId()
Definition Object.h:129
virtual ~Object()
Definition Object.h:117
ObjectId id
Definition Object.h:131
static bool registerClass(ClassInfo *ci)
Definition Object.cpp:19
static uint32_t generateObjectId()
Definition Object.cpp:51
static std::atomic_uint32_t cId
Definition Object.h:134
This is an implementation of AdditiveCCD based on peridyno.
Definition Array.h:25
bool Register(ClassInfo *ci)
Definition Object.cpp:56
uint32_t ObjectId
Definition Object.h:110
Object *(* ObjectConstructorFn)(void)
Definition Object.h:27