PeriDyno 1.2.1
Loading...
Searching...
No Matches
FInstance.h
Go to the documentation of this file.
1
19#pragma once
20#include <iostream>
21#include "FBase.h"
22
23namespace dyno {
24
25 class Object;
26
27 class InstanceBase : public FBase
28 {
29 public:
31 InstanceBase(std::string name, std::string description, FieldTypeEnum fieldType, OBase* parent)
32 : FBase(name, description, fieldType, parent) {}
33
34 public:
35 virtual bool canBeConnectedBy(InstanceBase* ins) = 0;
36 virtual void setObjectPointer(std::shared_ptr<Object> op) = 0;
37 virtual std::shared_ptr<Object> objectPointer() = 0;
38 virtual std::shared_ptr<Object> standardObjectPointer() = 0;
39
40 static const std::string className() {
41 return std::string("FInstance");
42 }
43 };
44
49 template<typename T>
50 class FInstance : public InstanceBase
51 {
52 public:
53 typedef T VarType;
55
57
58 FInstance(std::string name, std::string description, FieldTypeEnum fieldType, OBase* parent)
59 : InstanceBase(name, description, fieldType, parent) {}
60
61 const std::string getTemplateName() override { return std::string(typeid(VarType).name()); }
62 const std::string getClassName() final { return "FInstance"; }
63
64 std::shared_ptr<T> getDataPtr() {
65 InstanceBase* ins = dynamic_cast<InstanceBase*>(this->getTopField());
66 std::shared_ptr<T> data = std::static_pointer_cast<T>(ins->objectPointer());
67
68 this->tick();
69
70 return data;
71 }
72
73 std::shared_ptr<T> constDataPtr() {
74 InstanceBase* ins = dynamic_cast<InstanceBase*>(this->getTopField());
75 std::shared_ptr<T> data = std::static_pointer_cast<T>(ins->objectPointer());
76
77 return data;
78 }
79
80 void setDataPtr(std::shared_ptr<T> sPtr)
81 {
82 InstanceBase* ins = dynamic_cast<InstanceBase*>(this->getTopField());
83 ins->setObjectPointer(sPtr);
84
85 this->tick();
86 }
87
88 std::shared_ptr<T> allocate() {
89 if (mData == nullptr) {
90 mData = std::make_shared<T>();
91 }
92
93 this->tick();
94
95 return mData;
96 }
97
98 bool isEmpty() override {
99 return this->constDataPtr() == nullptr;
100 }
101
102 bool connect(FBase* dst) override {
103 InstanceBase* dstIns = dynamic_cast<InstanceBase*>(dst);
104 if (dstIns == nullptr) {
105 return false;
106 }
107
108 if (!dstIns->canBeConnectedBy(this)) {
109 return false;
110 }
111
112 return this->connectField(dst);
113 }
114
115 bool disconnect(FBase* dst) override
116 {
117 InstanceBase* dstIns = dynamic_cast<InstanceBase*>(dst);
118 if (dstIns == nullptr) {
119 return false;
120 }
121
122 return this->disconnectField(dst);
123 }
124
126 auto dataPtr = this->getDataPtr();
127 assert(dataPtr != nullptr);
128
129 return *dataPtr;
130 }
131
132 uint size() override { return 1; }
133
134 public:
135 std::shared_ptr<Object> objectPointer() final {
136 return std::dynamic_pointer_cast<Object>(mData);
137 }
138
139 std::shared_ptr<Object> standardObjectPointer() final {
140 return std::make_shared<T>();
141 }
142
143 void setObjectPointer(std::shared_ptr<Object> op) final {
144 auto dPtr = std::dynamic_pointer_cast<T>(op);
145 assert(dPtr != nullptr);
146
147 mData = dPtr;
148 }
149
151 if (ins->inputPolicy() == FInputPolicy::One)
152 {
153 std::shared_ptr<Object> dataPtr = ins->standardObjectPointer();
154 auto dPtr = std::dynamic_pointer_cast<T>(dataPtr);
155
156 return dPtr == nullptr ? false : true;
157 }
158
159 return false;
160 }
161
162 private:
163 std::shared_ptr<T> mData = nullptr;
164 };
165
166 template<typename T>
168 {
169 public:
170 typedef T VarType;
172
174
175 FInstances(std::string name, std::string description, FieldTypeEnum fieldType, OBase* parent)
176 : InstanceBase(name, description, fieldType, parent) {}
177
178 const std::string getTemplateName() override { return std::string(typeid(VarType).name()); }
179 const std::string getClassName() final { return "FInstances"; }
180
181 std::shared_ptr<T> constDataPtr(const uint i) {
182 assert(i < this->getSources().size());
183
184 InstanceBase* ins = dynamic_cast<InstanceBase*>(this->getSources()[i]->getTopField());
185 std::shared_ptr<T> data = std::static_pointer_cast<T>(ins->objectPointer());
186
187 return data;
188 }
189
193 bool connect(FBase* dst) override {
194 return false;
195 }
196
197 bool disconnect(FBase* dst) override {
198 return false;
199 }
200
201 bool isEmpty() override {
202 return this->getSources().size() == 0;
203 }
204
205 uint size() override { return this->getSources().size(); }
206
207 public:
209
210 void setObjectPointer(std::shared_ptr<Object> op) override {};
211 std::shared_ptr<Object> objectPointer() override { return nullptr; }
212
213 std::shared_ptr<Object> standardObjectPointer() final {
214 return std::make_shared<T>();
215 }
216
218 if (ins->inputPolicy() == FInputPolicy::One)
219 {
220 std::shared_ptr<Object> dataPtr = ins->standardObjectPointer();
221
222 auto dPtr = std::dynamic_pointer_cast<T>(dataPtr);
223
224 return dPtr == nullptr ? false : true;
225 }
226 else
227 return false;
228 }
229 };
230}
assert(queueCount >=1)
OBase * parent()
Definition FBase.cpp:41
void tick()
Definition FBase.cpp:340
FBase * getTopField()
Definition FBase.cpp:264
FInputPolicy
Field with a policy of FInputPolicy::Many is not allowed to be connected to FInputPolicy::One Field w...
Definition FBase.h:55
bool disconnectField(FBase *dst)
Definition FBase.cpp:254
bool connectField(FBase *dst)
Definition FBase.cpp:230
std::vector< FBase * > & getSources()
Definition FBase.h:90
std::shared_ptr< T > getDataPtr()
Definition FInstance.h:64
std::shared_ptr< T > constDataPtr()
Definition FInstance.h:73
FInstance< T > FieldType
Definition FInstance.h:54
void setObjectPointer(std::shared_ptr< Object > op) final
Definition FInstance.h:143
bool canBeConnectedBy(InstanceBase *ins) final
Definition FInstance.h:150
bool connect(FBase *dst) override
Definition FInstance.h:102
uint size() override
Definition FInstance.h:132
std::shared_ptr< T > allocate()
Definition FInstance.h:88
FInstance(std::string name, std::string description, FieldTypeEnum fieldType, OBase *parent)
Definition FInstance.h:58
void setDataPtr(std::shared_ptr< T > sPtr)
Definition FInstance.h:80
std::shared_ptr< Object > standardObjectPointer() final
Definition FInstance.h:139
bool disconnect(FBase *dst) override
Definition FInstance.h:115
std::shared_ptr< Object > objectPointer() final
Definition FInstance.h:135
std::shared_ptr< T > mData
Definition FInstance.h:163
bool isEmpty() override
Definition FInstance.h:98
const std::string getTemplateName() override
Definition FInstance.h:61
const std::string getClassName() final
Definition FInstance.h:62
std::shared_ptr< T > constDataPtr(const uint i)
Definition FInstance.h:181
bool disconnect(FBase *dst) override
Definition FInstance.h:197
bool connect(FBase *dst) override
FInstances cannot be connected to other fields.
Definition FInstance.h:193
FInstances< T > FieldType
Definition FInstance.h:171
const std::string getTemplateName() override
Definition FInstance.h:178
bool canBeConnectedBy(InstanceBase *ins) final
Definition FInstance.h:217
FInputPolicy inputPolicy() override
Definition FInstance.h:208
bool isEmpty() override
Definition FInstance.h:201
const std::string getClassName() final
Definition FInstance.h:179
std::shared_ptr< Object > objectPointer() override
Definition FInstance.h:211
uint size() override
Definition FInstance.h:205
FInstances(std::string name, std::string description, FieldTypeEnum fieldType, OBase *parent)
Definition FInstance.h:175
void setObjectPointer(std::shared_ptr< Object > op) override
Definition FInstance.h:210
std::shared_ptr< Object > standardObjectPointer() final
Definition FInstance.h:213
virtual std::shared_ptr< Object > standardObjectPointer()=0
virtual void setObjectPointer(std::shared_ptr< Object > op)=0
virtual bool canBeConnectedBy(InstanceBase *ins)=0
static const std::string className()
Definition FInstance.h:40
virtual std::shared_ptr< Object > objectPointer()=0
InstanceBase(std::string name, std::string description, FieldTypeEnum fieldType, OBase *parent)
Definition FInstance.h:31
#define T(t)
This is an implementation of AdditiveCCD based on peridyno.
Definition Array.h:25
FieldTypeEnum
Definition FBase.h:30
unsigned int uint
Definition VkProgram.h:14