PeriDyno 1.2.1
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
55 {
58 };
59
60 virtual uint size() = 0;
61 virtual const std::string getTemplateName() { return std::string(""); }
62 virtual const std::string getClassName() { return std::string("Field"); }
63
64 std::string getObjectName() { return m_name; }
65 std::string getDescription() { return m_description; }
66 virtual DeviceType getDeviceType() { return DeviceType::UNDEFINED; }
67
68 void setObjectName(std::string name) { m_name = name; }
69 void setDescription(std::string description) { m_description = description; }
70
71 void setParent(OBase* owner);
72 OBase* parent();
73
74 bool isDerived();
75 bool isAutoDestroyable();
76
77 void setAutoDestroy(bool autoDestroy);
78 void setDerived(bool derived);
79
82
83 void requestValidSources(std::vector<FBase*>& src);
84
85 //Used for fields with FInputPolicy::One
88
89 //Used for fields with FInputPolicy::Many
90 std::vector<FBase*>& getSources() { return mMultipleSources; }
91 std::vector<FBase*>& getSinks() { return mSinks; }
92
93
94
95 bool isModified();
96
102 bool isActive();
103 void setActive(bool b);
104
105 void tick();
106 void tack();
107
108 bool isOptional();
109 void tagOptional(bool optional);
110
111 inline float getMin() { return m_min; }
112 inline void setMin(float min_val) { m_min = min_val; }
113
114 inline float getMax() { return m_max; }
115 inline void setMax(float max_val) { m_max = max_val; }
116
117 inline void setRange(float min_val, float max_val) { m_min = min_val; m_max = max_val; }
118
120
121 virtual bool connect(FBase* dst) = 0;
122 virtual bool disconnect(FBase* dst);
123
124
126
127 virtual inline std::string serialize() { return ""; }
128 virtual inline bool deserialize(const std::string& str) { return false; }
129
136
143
144
151
158
159 virtual bool isEmpty() = 0;
160 virtual void update();
161
162 void attach(std::shared_ptr<FCallBackFunc> func);
163 void detach(std::shared_ptr<FCallBackFunc> func);
164
165protected:
166 void setSource(FBase* source);
167
168 bool addSink(FBase* f);
169 bool removeSink(FBase* f);
170
171 bool addSource(FBase* f);
172 bool removeSource(FBase* f);
173
174 bool connectField(FBase* dst);
175 bool disconnectField(FBase* dst);
176
178
179private:
180 std::string m_name;
181 std::string m_description;
182
183 bool m_optional = false;
184
185 bool m_autoDestroyable = true;
186 bool m_derived = false;
187
188 bool mActive = true;
189
190 float m_min = -FLT_MAX;
191 float m_max = FLT_MAX;
192
193 OBase* mOwner = nullptr;
194
199 std::vector<FBase*> mMultipleSources;
200
201 std::vector<FBase*> mSinks;
202
205
206 std::vector<std::shared_ptr<FCallBackFunc>> mCallbackFunc;
207};
208
209#define DEFINE_FIELD_FUNC(DerivedField, Data, FieldName) \
210FieldName() : FBase("", ""){} \
211\
212FieldName(std::string name, std::string description, FieldTypeEnum fieldType, OBase* parent) \
213 : FBase(name, description, fieldType, parent){} \
214\
215const std::string getTemplateName() override { return std::string(typeid(VarType).name()); } \
216const std::string getClassName() override { return std::string(#FieldName); } \
217\
218std::shared_ptr<Data>& getDataPtr() \
219{ \
220 FBase* topField = this->getTopField(); \
221 DerivedField* derived = dynamic_cast<DerivedField*>(topField); \
222 derived->tick(); \
223 return derived->m_data; \
224} \
225\
226std::shared_ptr<Data>& constDataPtr() \
227{ \
228 FBase* topField = this->getTopField(); \
229 DerivedField* derived = dynamic_cast<DerivedField*>(topField); \
230 return derived->m_data; \
231} \
232\
233std::shared_ptr<Data> allocate() \
234{ \
235 auto& data = this->getDataPtr(); \
236 if (data == nullptr) { \
237 data = std::make_shared<Data>(); \
238 } \
239 return data; \
240} \
241\
242bool connect(DerivedField* dst) \
243{ \
244 this->connectField(dst); \
245 return true; \
246} \
247bool connect(FBase* dst) override { \
248 DerivedField* derived = dynamic_cast<DerivedField*>(dst); \
249 if (derived == nullptr) return false; \
250 return this->connect(derived); \
251} \
252Data& getData() { \
253 auto dataPtr = this->getDataPtr(); \
254 assert(dataPtr != nullptr); \
255 return *dataPtr; \
256} \
257const Data& constData() { \
258 auto dataPtr = this->constDataPtr(); \
259 assert(dataPtr != nullptr); \
260 return *dataPtr; \
261} \
262private: \
263 std::shared_ptr<Data> m_data = nullptr; \
264public:
265
266}
virtual uint size()=0
bool mActive
Definition FBase.h:188
bool addSink(FBase *f)
Definition FBase.cpp:105
virtual bool disconnect(FBase *dst)
Definition FBase.cpp:259
void setSource(FBase *source)
Definition FBase.cpp:46
TimeStamp mTickTime
Definition FBase.h:203
FieldTypeEnum getFieldType()
Definition FBase.cpp:388
void tagOptional(bool optional)
Definition FBase.cpp:357
OBase * parent()
Definition FBase.cpp:41
FieldTypeEnum m_fType
Definition FBase.h:177
std::string getObjectName()
Definition FBase.h:64
virtual const std::string getClassName()
Definition FBase.h:62
void tick()
Definition FBase.cpp:340
void tack()
Definition FBase.cpp:347
bool removeSource(FBase *f)
Definition FBase.cpp:166
FBase * getTopField()
Definition FBase.cpp:264
bool isDerived()
Definition FBase.cpp:182
bool m_autoDestroyable
Definition FBase.h:185
virtual bool deserialize(const std::string &str)
Definition FBase.h:128
float m_min
Definition FBase.h:190
std::vector< FBase * > mMultipleSources
Definition FBase.h:199
FBase * getSource()
Definition FBase.cpp:52
void requestValidSources(std::vector< FBase * > &src)
Definition FBase.cpp:212
std::string m_description
Definition FBase.h:181
void attach(std::shared_ptr< FCallBackFunc > func)
Definition FBase.cpp:290
void setMin(float min_val)
Definition FBase.h:112
FBase * promoteOuput()
Display a state field as an ouput field.
Definition FBase.cpp:57
virtual DeviceType getDeviceType()
Definition FBase.h:66
void setDerived(bool derived)
Definition FBase.cpp:197
FBase * mSingleSource
Definition FBase.h:198
virtual ~FBase()
Definition FBase.cpp:372
bool isAutoDestroyable()
Definition FBase.cpp:187
FInputPolicy
Field with a policy of FInputPolicy::Many is not allowed to be connected to FInputPolicy::One Field w...
Definition FBase.h:55
std::vector< std::shared_ptr< FCallBackFunc > > mCallbackFunc
Definition FBase.h:206
std::vector< FBase * > & getSinks()
Definition FBase.h:91
TimeStamp mTackTime
Definition FBase.h:204
void detach(std::shared_ptr< FCallBackFunc > func)
Definition FBase.cpp:298
uint sizeOfSinks()
Definition FBase.cpp:225
virtual const std::string getTemplateName()
Definition FBase.h:61
void setParent(OBase *owner)
Definition FBase.cpp:36
void setObjectName(std::string name)
Definition FBase.h:68
virtual bool isEmpty()=0
bool m_optional
Definition FBase.h:183
bool isOptional()
Definition FBase.cpp:352
FBase * demoteInput()
Hide a state field from inputs.
Definition FBase.cpp:93
bool isModified()
Definition FBase.cpp:311
std::vector< FBase * > mSinks
Definition FBase.h:201
bool addSource(FBase *f)
Definition FBase.cpp:150
bool m_derived
Definition FBase.h:186
void setAutoDestroy(bool autoDestroy)
Definition FBase.cpp:192
bool disconnectField(FBase *dst)
Definition FBase.cpp:254
virtual FInputPolicy inputPolicy()
Definition FBase.h:125
virtual bool connect(FBase *dst)=0
std::string m_name
Definition FBase.h:180
FBase * promoteInput()
Display a state field as an input field.
Definition FBase.cpp:69
void setActive(bool b)
Definition FBase.cpp:335
void setDescription(std::string description)
Definition FBase.h:69
uint sizeOfValidSources()
Definition FBase.cpp:202
FBase * demoteOuput()
Hide a state field from outputs.
Definition FBase.cpp:81
bool isActive()
A variable to control the visibility of the field.
Definition FBase.cpp:330
bool removeSink(FBase *f)
Definition FBase.cpp:127
void setMax(float max_val)
Definition FBase.h:115
virtual std::string serialize()
Definition FBase.h:127
float m_max
Definition FBase.h:191
float getMin()
Definition FBase.h:111
virtual void update()
Definition FBase.cpp:269
std::string getDescription()
Definition FBase.h:65
bool connectField(FBase *dst)
Definition FBase.cpp:230
OBase * mOwner
Definition FBase.h:193
float getMax()
Definition FBase.h:114
void setRange(float min_val, float max_val)
Definition FBase.h:117
std::vector< FBase * > & getSources()
Definition FBase.h:90
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