PeriDyno 1.0.0
Loading...
Searching...
No Matches
FInstance.h
Go to the documentation of this file.
1
16#pragma once
17#include <iostream>
18#include "FBase.h"
19
20namespace dyno {
21
22 class Object;
23
24 class InstanceBase : public FBase
25 {
26 public:
28 InstanceBase(std::string name, std::string description, FieldTypeEnum fieldType, OBase* parent)
29 : FBase(name, description, fieldType, parent) {}
30
31 public:
32 virtual bool canBeConnectedBy(InstanceBase* ins) = 0;
33 virtual void setObjectPointer(std::shared_ptr<Object> op) = 0;
34 virtual std::shared_ptr<Object> objectPointer() = 0;
35 virtual std::shared_ptr<Object> standardObjectPointer() = 0;
36
37 static const std::string className() {
38 return std::string("FInstance");
39 }
40 private:
41
42 };
43
48 template<typename T>
49 class FInstance : public InstanceBase
50 {
51 public:
52 typedef T VarType;
54
56
57 FInstance(std::string name, std::string description, FieldTypeEnum fieldType, OBase* parent)
58 : InstanceBase(name, description, fieldType, parent) {}
59
60 const std::string getTemplateName() override { return std::string(typeid(VarType).name()); }
61 const std::string getClassName() final { return InstanceBase::className(); }
62
63 std::shared_ptr<T> getDataPtr() {
64 InstanceBase* ins = dynamic_cast<InstanceBase*>(this->getTopField());
65 std::shared_ptr<T> data = std::static_pointer_cast<T>(ins->objectPointer());
66
67 this->tick();
68
69 return data;
70 }
71
72 std::shared_ptr<T> constDataPtr() {
73 InstanceBase* ins = dynamic_cast<InstanceBase*>(this->getTopField());
74 std::shared_ptr<T> data = std::static_pointer_cast<T>(ins->objectPointer());
75
76 return data;
77 }
78
79 void setDataPtr(std::shared_ptr<T> sPtr)
80 {
81 InstanceBase* ins = dynamic_cast<InstanceBase*>(this->getTopField());
82 ins->setObjectPointer(sPtr);
83
84 this->tick();
85 }
86
87 std::shared_ptr<T> allocate() {
88 if (mData == nullptr) {
89 mData = std::make_shared<T>();
90 }
91
92 this->tick();
93
94 return mData;
95 }
96
97 bool isEmpty() override {
98 return this->constDataPtr() == nullptr;
99 }
100
101 bool connect(FBase* dst) override {
102 InstanceBase* ins = dynamic_cast<InstanceBase*>(dst);
103 if (ins == nullptr) {
104 return false;
105 }
106
107 if (!ins->canBeConnectedBy(this)) {
108 return false;
109 }
110
111 this->connectField(dst);
112 return true;
113 }
114
116 auto dataPtr = this->getDataPtr();
117 assert(dataPtr != nullptr);
118
119 return *dataPtr;
120 }
121
122 uint size() override { return 1; }
123
124 public:
125 std::shared_ptr<Object> objectPointer() final {
126 return std::dynamic_pointer_cast<Object>(mData);
127 }
128
129 std::shared_ptr<Object> standardObjectPointer() final {
130 return std::make_shared<T>();
131 }
132
133 void setObjectPointer(std::shared_ptr<Object> op) final {
134 auto dPtr = std::dynamic_pointer_cast<T>(op);
135 assert(dPtr != nullptr);
136
137 mData = dPtr;
138 }
139
141 std::shared_ptr<Object> dataPtr = ins->standardObjectPointer();
142 auto dPtr = std::dynamic_pointer_cast<T>(dataPtr);
143
144 return dPtr == nullptr ? false : true;
145 }
146
147 private:
148 std::shared_ptr<T> mData = nullptr;
149 };
150}
assert(queueCount >=1)
OBase * parent()
Definition FBase.cpp:41
void tick()
Definition FBase.cpp:250
FBase * getTopField()
Definition FBase.cpp:196
bool connectField(FBase *dst)
Definition FBase.cpp:165
std::shared_ptr< T > getDataPtr()
Definition FInstance.h:63
std::shared_ptr< T > constDataPtr()
Definition FInstance.h:72
FInstance< T > FieldType
Definition FInstance.h:53
void setObjectPointer(std::shared_ptr< Object > op) final
Definition FInstance.h:133
bool canBeConnectedBy(InstanceBase *ins) final
Definition FInstance.h:140
bool connect(FBase *dst) override
Definition FInstance.h:101
uint size() override
Definition FInstance.h:122
std::shared_ptr< T > allocate()
Definition FInstance.h:87
FInstance(std::string name, std::string description, FieldTypeEnum fieldType, OBase *parent)
Definition FInstance.h:57
void setDataPtr(std::shared_ptr< T > sPtr)
Definition FInstance.h:79
std::shared_ptr< Object > standardObjectPointer() final
Definition FInstance.h:129
std::shared_ptr< Object > objectPointer() final
Definition FInstance.h:125
std::shared_ptr< T > mData
Definition FInstance.h:148
bool isEmpty() override
Definition FInstance.h:97
const std::string getTemplateName() override
Definition FInstance.h:60
const std::string getClassName() final
Definition FInstance.h:61
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:37
virtual std::shared_ptr< Object > objectPointer()=0
InstanceBase(std::string name, std::string description, FieldTypeEnum fieldType, OBase *parent)
Definition FInstance.h:28
#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