PeriDyno 1.0.0
Loading...
Searching...
No Matches
FBase.h
Go to the documentation of this file.
1
16#pragma once
17#include "Platform.h"
18#include "TimeStamp.h"
19
20#include <typeinfo>
21#include <string>
22#include <functional>
23#include <cfloat>
24
25namespace dyno {
26 class OBase;
27 class FCallBackFunc;
28
38
43class FBase
44{
45public:
46 FBase() : m_name("default"), m_description("") {};
47 FBase(std::string name, std::string description, FieldTypeEnum type = FieldTypeEnum::Param, OBase* parent = nullptr);
48 virtual ~FBase();
49
50 virtual uint size() = 0;
51 virtual const std::string getTemplateName() { return std::string(""); }
52 virtual const std::string getClassName() { return std::string("Field"); }
53
54 std::string getObjectName() { return m_name; }
55 std::string getDescription() { return m_description; }
56 virtual DeviceType getDeviceType() { return DeviceType::UNDEFINED; }
57
58 void setObjectName(std::string name) { m_name = name; }
59 void setDescription(std::string description) { m_description = description; }
60
61 void setParent(OBase* owner);
62 OBase* parent();
63
64 bool isDerived();
65 bool isAutoDestroyable();
66
67 void setAutoDestroy(bool autoDestroy);
68 void setDerived(bool derived);
69
70 uint sizeOfSinks() { return (uint)mSinks.size(); }
71 std::vector<FBase*>& getSinks() { return mSinks; }
72
73 bool isModified();
74
75 void tick();
76 void tack();
77
78 bool isOptional();
79 void tagOptional(bool optional);
80
81 inline float getMin() { return m_min; }
82 inline void setMin(float min_val) { m_min = min_val; }
83
84 inline float getMax() { return m_max; }
85 inline void setMax(float max_val) { m_max = max_val; }
86
87 inline void setRange(float min_val, float max_val) { m_min = min_val; m_max = max_val; }
88
90
91 virtual bool connect(FBase* dst) = 0;
92 virtual bool disconnect(FBase* dst);
93
94 virtual inline std::string serialize() { return ""; }
95 virtual inline bool deserialize(const std::string& str) { return false; }
96
99
106
113
114
121
128
129 virtual bool isEmpty() = 0;
130 virtual void update();
131
132 void attach(std::shared_ptr<FCallBackFunc> func);
133 void detach(std::shared_ptr<FCallBackFunc> func);
134
135protected:
136 void setSource(FBase* source);
137
138 void addSink(FBase* f);
139 bool removeSink(FBase* f);
140
141 bool connectField(FBase* dst);
142 bool disconnectField(FBase* dst);
143
145
146private:
147 std::string m_name;
148 std::string m_description;
149
150 bool m_optional = false;
151
152 bool m_autoDestroyable = true;
153 bool m_derived = false;
154
155 float m_min = -FLT_MAX;
156 float m_max = FLT_MAX;
157
158 OBase* mOwner = nullptr;
159
160 FBase* mSource = nullptr;
161
162 std::vector<FBase*> mSinks;
163
166
167 std::vector<std::shared_ptr<FCallBackFunc>> mCallbackFunc;
168};
169
170#define DEFINE_FIELD_FUNC(DerivedField, Data, FieldName) \
171FieldName() : FBase("", ""){} \
172\
173FieldName(std::string name, std::string description, FieldTypeEnum fieldType, OBase* parent) \
174 : FBase(name, description, fieldType, parent){} \
175\
176const std::string getTemplateName() override { return std::string(typeid(VarType).name()); } \
177const std::string getClassName() override { return std::string(#FieldName); } \
178\
179std::shared_ptr<Data>& getDataPtr() \
180{ \
181 FBase* topField = this->getTopField(); \
182 DerivedField* derived = dynamic_cast<DerivedField*>(topField); \
183 derived->tick(); \
184 return derived->m_data; \
185} \
186\
187std::shared_ptr<Data>& constDataPtr() \
188{ \
189 FBase* topField = this->getTopField(); \
190 DerivedField* derived = dynamic_cast<DerivedField*>(topField); \
191 return derived->m_data; \
192} \
193\
194std::shared_ptr<Data> allocate() \
195{ \
196 auto& data = this->getDataPtr(); \
197 if (data == nullptr) { \
198 data = std::make_shared<Data>(); \
199 } \
200 return data; \
201} \
202\
203bool connect(DerivedField* dst) \
204{ \
205 this->connectField(dst); \
206 return true; \
207} \
208bool connect(FBase* dst) override { \
209 DerivedField* derived = dynamic_cast<DerivedField*>(dst); \
210 if (derived == nullptr) return false; \
211 return this->connect(derived); \
212} \
213Data& getData() { \
214 auto dataPtr = this->getDataPtr(); \
215 assert(dataPtr != nullptr); \
216 return *dataPtr; \
217} \
218const Data& constData() { \
219 auto dataPtr = this->constDataPtr(); \
220 assert(dataPtr != nullptr); \
221 return *dataPtr; \
222} \
223private: \
224 std::shared_ptr<Data> m_data = nullptr; \
225public:
226
227}
virtual uint size()=0
virtual bool disconnect(FBase *dst)
Definition FBase.cpp:191
void setSource(FBase *source)
Definition FBase.cpp:46
TimeStamp mTickTime
Definition FBase.h:164
FieldTypeEnum getFieldType()
Definition FBase.cpp:300
void tagOptional(bool optional)
Definition FBase.cpp:267
OBase * parent()
Definition FBase.cpp:41
FieldTypeEnum m_fType
Definition FBase.h:144
std::string getObjectName()
Definition FBase.h:54
virtual const std::string getClassName()
Definition FBase.h:52
void tick()
Definition FBase.cpp:250
void tack()
Definition FBase.cpp:257
FBase * getTopField()
Definition FBase.cpp:196
bool isDerived()
Definition FBase.cpp:145
bool m_autoDestroyable
Definition FBase.h:152
virtual bool deserialize(const std::string &str)
Definition FBase.h:95
float m_min
Definition FBase.h:155
FBase * getSource()
Definition FBase.cpp:52
std::string m_description
Definition FBase.h:148
void attach(std::shared_ptr< FCallBackFunc > func)
Definition FBase.cpp:222
void setMin(float min_val)
Definition FBase.h:82
FBase * promoteOuput()
Display a state field as an ouput field.
Definition FBase.cpp:57
virtual DeviceType getDeviceType()
Definition FBase.h:56
void setDerived(bool derived)
Definition FBase.cpp:160
virtual ~FBase()
Definition FBase.cpp:282
bool isAutoDestroyable()
Definition FBase.cpp:150
std::vector< std::shared_ptr< FCallBackFunc > > mCallbackFunc
Definition FBase.h:167
std::vector< FBase * > & getSinks()
Definition FBase.h:71
TimeStamp mTackTime
Definition FBase.h:165
void detach(std::shared_ptr< FCallBackFunc > func)
Definition FBase.cpp:230
uint sizeOfSinks()
Definition FBase.h:70
virtual const std::string getTemplateName()
Definition FBase.h:51
void setParent(OBase *owner)
Definition FBase.cpp:36
void setObjectName(std::string name)
Definition FBase.h:58
virtual bool isEmpty()=0
bool m_optional
Definition FBase.h:150
bool isOptional()
Definition FBase.cpp:262
FBase * demoteInput()
Hide a state field from inputs.
Definition FBase.cpp:93
bool isModified()
Definition FBase.cpp:243
std::vector< FBase * > mSinks
Definition FBase.h:162
void addSink(FBase *f)
Definition FBase.cpp:105
bool m_derived
Definition FBase.h:153
void setAutoDestroy(bool autoDestroy)
Definition FBase.cpp:155
FBase * mSource
Definition FBase.h:160
bool disconnectField(FBase *dst)
Definition FBase.cpp:186
virtual bool connect(FBase *dst)=0
std::string m_name
Definition FBase.h:147
FBase * promoteInput()
Display a state field as an input field.
Definition FBase.cpp:69
void setDescription(std::string description)
Definition FBase.h:59
FBase * demoteOuput()
Hide a state field from outputs.
Definition FBase.cpp:81
bool removeSink(FBase *f)
Definition FBase.cpp:124
void setMax(float max_val)
Definition FBase.h:85
virtual std::string serialize()
Definition FBase.h:94
float m_max
Definition FBase.h:156
float getMin()
Definition FBase.h:81
virtual void update()
Definition FBase.cpp:201
std::string getDescription()
Definition FBase.h:55
bool connectField(FBase *dst)
Definition FBase.cpp:165
OBase * mOwner
Definition FBase.h:158
float getMax()
Definition FBase.h:84
void setRange(float min_val, float max_val)
Definition FBase.h:87
Time stamp.
Definition TimeStamp.h:26
This is an implementation of AdditiveCCD based on peridyno.
Definition Array.h:25
FieldTypeEnum
Definition FBase.h:30
@ In
Definition FBase.h:31
@ Next
Definition FBase.h:36
@ Param
Definition FBase.h:34
@ Out
Definition FBase.h:32
@ State
Definition FBase.h:35
@ IO
Definition FBase.h:33
unsigned int uint
Definition VkProgram.h:14