VTK  9.2.6
Object.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include "../RTWrapper.h"
4 
5 #include <VisRTX.h>
6 
7 #include <cstring>
8 #include <cassert>
9 #include <iostream>
10 #include <map>
11 #include <string>
12 #include <vector>
13 
14 namespace RTW
15 {
16  class Data;
17 
18  class Object
19  {
20  public:
22  : dataType(type)
23  {
24  this->AddRef();
25  }
26 
27  virtual ~Object()
28  {
29  // Release all objects
30  for (auto it : this->objectMap.map)
31  if (it.second)
32  it.second->Release();
33  }
34 
35  virtual void Commit() = 0;
36 
37  public:
38  void AddRef()
39  {
40  ++this->refCount;
41  }
42 
43  void Release()
44  {
45  assert(refCount > 0);
46  if (--refCount == 0)
47  {
48  delete this;
49  }
50  }
51 
52  private:
53  int64_t refCount = 0;
54 
55  public:
56  inline void SetString(const std::string& id, const std::string& s)
57  {
58  this->stringMap.Set(id, s);
59  }
60 
61  inline const std::string GetString(const std::vector<std::string>& ids, const std::string& defaultValue = "", bool* found = nullptr) const
62  {
63  return this->stringMap.Get(ids, defaultValue, found);
64  }
65 
66  inline bool GetString(const std::vector<std::string>& ids, std::string* result, const std::string& defaultValue = nullptr)
67  {
68  bool found;
69  *result = this->GetString(ids, defaultValue, &found);
70  return found;
71  }
72 
73  inline void SetBool(const std::string& id, bool b)
74  {
75  this->boolMap.Set(id, b);
76  }
77 
78  virtual void SetObject(const std::string& id, Object* object)
79  {
80  // Check if already exists and release
81  Object* current = this->objectMap.Get({ id }, nullptr);
82  if (current)
83  current->Release();
84 
85  // Set new object and add reference
86  if (object)
87  {
88  this->objectMap.Set(id, object);
89  object->AddRef();
90  }
91  else
92  {
93  this->objectMap.Remove(id);
94  }
95  }
96 
97  template<typename T = Object>
98  inline T* GetObject(const std::vector<std::string>& ids, T* defaultValue = nullptr, bool* found = nullptr) const
99  {
100  return reinterpret_cast<T*>(this->objectMap.Get(ids, reinterpret_cast<Object*>(defaultValue), found));
101  }
102 
103  template<typename T = Object>
104  inline bool GetObject(const std::vector<std::string>& ids, T** result, T* defaultValue = nullptr)
105  {
106  bool found;
107  *result = this->GetObject<T>(ids, defaultValue, &found);
108  return found;
109  }
110 
111  inline void SetInt(const std::string& id, int32_t x)
112  {
113  this->int1Map.Set(id, x);
114  }
115 
116  inline int32_t GetInt(const std::vector<std::string>& ids, int32_t defaultValue = 0, bool* found = nullptr) const
117  {
118  return this->int1Map.Get(ids, defaultValue, found);
119  }
120 
121  inline bool GetInt(const std::vector<std::string>& ids, int32_t* result, int32_t defaultValue = 0)
122  {
123  bool found;
124  *result = this->GetInt(ids, defaultValue, &found);
125  return found;
126  }
127 
128  inline void SetFloat(const std::string& id, float x)
129  {
130  this->float1Map.Set(id, x);
131  }
132 
133  inline float GetFloat(const std::vector<std::string>& ids, float defaultValue = 0.0f, bool* found = nullptr) const
134  {
135  return this->float1Map.Get(ids, defaultValue, found);
136  }
137 
138  inline bool GetFloat(const std::vector<std::string>& ids, float* result, float defaultValue = 0.0f)
139  {
140  bool found;
141  *result = this->GetFloat(ids, defaultValue, &found);
142  return found;
143  }
144 
145  inline void SetVec2i(const std::string& id, int32_t x, int32_t y)
146  {
147  this->int2Map.Set(id, VisRTX::Vec2i(x, y));
148  }
149 
150  inline VisRTX::Vec2i GetVec2i(const std::vector<std::string>& ids, const VisRTX::Vec2i& defaultValue = VisRTX::Vec2i(), bool* found = nullptr) const
151  {
152  return this->int2Map.Get(ids, defaultValue, found);
153  }
154 
155  inline bool GetVec2i(const std::vector<std::string>& ids, VisRTX::Vec2i* result, const VisRTX::Vec2i& defaultValue = VisRTX::Vec2i())
156  {
157  bool found;
158  *result = this->GetVec2i(ids, defaultValue, &found);
159  return found;
160  }
161 
162  inline void SetVec2f(const std::string& id, float x, float y)
163  {
164  this->float2Map.Set(id, VisRTX::Vec2f(x, y));
165  }
166 
167  inline VisRTX::Vec2f GetVec2f(const std::vector<std::string>& ids, const VisRTX::Vec2f& defaultValue = VisRTX::Vec2f(), bool* found = nullptr) const
168  {
169  return this->float2Map.Get(ids, defaultValue, found);
170  }
171 
172  inline bool GetVec2f(const std::vector<std::string>& ids, VisRTX::Vec2f* result, const VisRTX::Vec2f& defaultValue = VisRTX::Vec2f())
173  {
174  bool found;
175  *result = this->GetVec2f(ids, defaultValue, &found);
176  return found;
177  }
178 
179  inline void SetVec3i(const std::string& id, int32_t x, int32_t y, int32_t z)
180  {
181  this->int3Map.Set(id, VisRTX::Vec3i(x, y, z));
182  }
183 
184  inline VisRTX::Vec3i GetVec3i(const std::vector<std::string>& ids, const VisRTX::Vec3i& defaultValue = VisRTX::Vec3i(), bool* found = nullptr) const
185  {
186  return this->int3Map.Get(ids, defaultValue, found);
187  }
188 
189  inline bool GetVec3i(const std::vector<std::string>& ids, VisRTX::Vec3i* result, const VisRTX::Vec3i& defaultValue = VisRTX::Vec3i())
190  {
191  bool found;
192  *result = this->GetVec3i(ids, defaultValue, &found);
193  return found;
194  }
195 
196  inline void SetVec3f(const std::string& id, float x, float y, float z)
197  {
198  this->float3Map.Set(id, VisRTX::Vec3f(x, y, z));
199  }
200 
201  inline VisRTX::Vec3f GetVec3f(const std::vector<std::string>& ids, const VisRTX::Vec3f& defaultValue = VisRTX::Vec3f(), bool* found = nullptr) const
202  {
203  return this->float3Map.Get(ids, defaultValue, found);
204  }
205 
206  inline bool GetVec3f(const std::vector<std::string>& ids, VisRTX::Vec3f* result, const VisRTX::Vec3f& defaultValue = VisRTX::Vec3f())
207  {
208  bool found;
209  *result = this->GetVec3f(ids, defaultValue, &found);
210  return found;
211  }
212 
213  inline void SetVec4f(const std::string& id, float x, float y, float z, float w)
214  {
215  this->float4Map.Set(id, VisRTX::Vec4f(x, y, z, w));
216  }
217 
218  inline VisRTX::Vec4f GetVec4f(const std::vector<std::string>& ids, const VisRTX::Vec4f& defaultValue = VisRTX::Vec4f(), bool* found = nullptr) const
219  {
220  return this->float4Map.Get(ids, defaultValue, found);
221  }
222 
223  inline bool GetVec4f(const std::vector<std::string>& ids, VisRTX::Vec4f* result, const VisRTX::Vec4f& defaultValue = VisRTX::Vec4f())
224  {
225  bool found;
226  *result = this->GetVec4f(ids, defaultValue, &found);
227  return found;
228  }
229 
230  virtual void RemoveParam(const std::string& id)
231  {
232  this->stringMap.Remove(id);
233  this->objectMap.Remove(id);
234  this->int1Map.Remove(id);
235  this->float1Map.Remove(id);
236  this->float2Map.Remove(id);
237  this->int2Map.Remove(id);
238  this->int3Map.Remove(id);
239  this->float3Map.Remove(id);
240  this->float4Map.Remove(id);
241  }
242 
243  public:
244  void PrintAllParameters() const
245  {
246  for (auto it : this->stringMap.map)
247  std::cout << "String: \"" << it.first << "\" -> \"" << it.second << "\"" << std::endl;
248 
249  for (auto it : this->objectMap.map)
250  std::cout << "Object/Data: \"" << it.first << "\"" << std::endl;
251 
252  for (auto it : this->int1Map.map)
253  std::cout << "int1: \"" << it.first << "\" -> " << it.second << std::endl;
254 
255  for (auto it : this->float1Map.map)
256  std::cout << "float1: \"" << it.first << "\" -> " << it.second << std::endl;
257 
258  for (auto it : this->int2Map.map)
259  std::cout << "int2: \"" << it.first << "\" -> (" << it.second.x << ", " << it.second.y << ")" << std::endl;
260 
261  for (auto it : this->float2Map.map)
262  std::cout << "float2: \"" << it.first << "\" -> (" << it.second.x << ", " << it.second.y << ")" << std::endl;
263 
264  for (auto it : this->int3Map.map)
265  std::cout << "int3: \"" << it.first << "\" -> (" << it.second.x << ", " << it.second.y << ", " << it.second.z << ")" << std::endl;
266 
267  for (auto it : this->float3Map.map)
268  std::cout << "float3: \"" << it.first << "\" -> (" << it.second.x << ", " << it.second.y << ", " << it.second.z << ")" << std::endl;
269 
270  for (auto it : this->float4Map.map)
271  std::cout << "float4: \"" << it.first << "\" -> (" << it.second.x << ", " << it.second.y << ", " << it.second.z << ", " << it.second.w << ")" << std::endl;
272  }
273 
274  std::set<std::string> GetAllParameters() const
275  {
276  std::set<std::string> result;
277  for (auto it : this->stringMap.map)
278  result.insert("string " + it.first);
279 
280  for (auto it : this->objectMap.map)
281  result.insert("object " + it.first);
282 
283  for (auto it : this->int1Map.map)
284  result.insert("int1 " + it.first);
285 
286  for (auto it : this->float1Map.map)
287  result.insert("float1 " + it.first);
288 
289  for (auto it : this->int2Map.map)
290  result.insert("int2 " + it.first);
291 
292  for (auto it : this->float2Map.map)
293  result.insert("float2 " + it.first);
294 
295  for (auto it : this->int3Map.map)
296  result.insert("int3 " + it.first);
297 
298  for (auto it : this->float3Map.map)
299  result.insert("float3 " + it.first);
300 
301  for (auto it : this->float4Map.map)
302  result.insert("float4 " + it.first);
303  return result;
304  }
305 
307  {
308  return dataType;
309  }
310 
311  private:
312  template<typename T>
313  class ParameterMap
314  {
315  public:
316  inline void Set(const std::string& id, const T& value)
317  {
318  this->map[id] = value;
319  }
320 
321  inline T Get(const std::vector<std::string>& ids, const T& defaultValueValue, bool* found = nullptr) const
322  {
323  for (const std::string& id : ids)
324  {
325  auto it = this->map.find(id);
326  if (it != this->map.end())
327  {
328  if (found)
329  *found = true;
330  return (*it).second;
331  }
332  }
333 
334  if (found)
335  *found = false;
336  return defaultValueValue;
337  }
338 
339  inline void Remove(const std::string& id)
340  {
341  auto it = this->map.find(id);
342  if (it != this->map.end())
343  this->map.erase(it);
344  }
345 
346  public:
347  std::map<std::string, T> map;
348  };
349 
350  private:
351  ParameterMap<std::string> stringMap;
352  ParameterMap<bool> boolMap;
353  ParameterMap<Object*> objectMap;
354 
355  ParameterMap<int32_t> int1Map;
356  ParameterMap<float> float1Map;
357  ParameterMap<VisRTX::Vec2f> float2Map;
358  ParameterMap<VisRTX::Vec2i> int2Map;
359  ParameterMap<VisRTX::Vec3i> int3Map;
360  ParameterMap<VisRTX::Vec3f> float3Map;
361  ParameterMap<VisRTX::Vec4f> float4Map;
362 
363  RTWDataType dataType;
364  };
365 }
void SetBool(const std::string &id, bool b)
Definition: Object.h:73
std::set< std::string > GetAllParameters() const
Definition: Object.h:274
int32_t GetInt(const std::vector< std::string > &ids, int32_t defaultValue=0, bool *found=nullptr) const
Definition: Object.h:116
void SetFloat(const std::string &id, float x)
Definition: Object.h:128
bool GetFloat(const std::vector< std::string > &ids, float *result, float defaultValue=0.0f)
Definition: Object.h:138
void AddRef()
Definition: Object.h:38
void SetVec2i(const std::string &id, int32_t x, int32_t y)
Definition: Object.h:145
T * GetObject(const std::vector< std::string > &ids, T *defaultValue=nullptr, bool *found=nullptr) const
Definition: Object.h:98
void Release()
Definition: Object.h:43
bool GetVec2f(const std::vector< std::string > &ids, VisRTX::Vec2f *result, const VisRTX::Vec2f &defaultValue=VisRTX::Vec2f())
Definition: Object.h:172
virtual ~Object()
Definition: Object.h:27
VisRTX::Vec2f GetVec2f(const std::vector< std::string > &ids, const VisRTX::Vec2f &defaultValue=VisRTX::Vec2f(), bool *found=nullptr) const
Definition: Object.h:167
bool GetVec3i(const std::vector< std::string > &ids, VisRTX::Vec3i *result, const VisRTX::Vec3i &defaultValue=VisRTX::Vec3i())
Definition: Object.h:189
bool GetString(const std::vector< std::string > &ids, std::string *result, const std::string &defaultValue=nullptr)
Definition: Object.h:66
void SetVec3f(const std::string &id, float x, float y, float z)
Definition: Object.h:196
const std::string GetString(const std::vector< std::string > &ids, const std::string &defaultValue="", bool *found=nullptr) const
Definition: Object.h:61
virtual void Commit()=0
bool GetVec2i(const std::vector< std::string > &ids, VisRTX::Vec2i *result, const VisRTX::Vec2i &defaultValue=VisRTX::Vec2i())
Definition: Object.h:155
bool GetVec3f(const std::vector< std::string > &ids, VisRTX::Vec3f *result, const VisRTX::Vec3f &defaultValue=VisRTX::Vec3f())
Definition: Object.h:206
virtual void RemoveParam(const std::string &id)
Definition: Object.h:230
bool GetVec4f(const std::vector< std::string > &ids, VisRTX::Vec4f *result, const VisRTX::Vec4f &defaultValue=VisRTX::Vec4f())
Definition: Object.h:223
VisRTX::Vec2i GetVec2i(const std::vector< std::string > &ids, const VisRTX::Vec2i &defaultValue=VisRTX::Vec2i(), bool *found=nullptr) const
Definition: Object.h:150
VisRTX::Vec4f GetVec4f(const std::vector< std::string > &ids, const VisRTX::Vec4f &defaultValue=VisRTX::Vec4f(), bool *found=nullptr) const
Definition: Object.h:218
void PrintAllParameters() const
Definition: Object.h:244
RTWDataType GetDataType() const
Definition: Object.h:306
virtual void SetObject(const std::string &id, Object *object)
Definition: Object.h:78
VisRTX::Vec3i GetVec3i(const std::vector< std::string > &ids, const VisRTX::Vec3i &defaultValue=VisRTX::Vec3i(), bool *found=nullptr) const
Definition: Object.h:184
void SetInt(const std::string &id, int32_t x)
Definition: Object.h:111
RTWDataType
Definition: Types.h:119
void SetVec4f(const std::string &id, float x, float y, float z, float w)
Definition: Object.h:213
VisRTX::Vec3f GetVec3f(const std::vector< std::string > &ids, const VisRTX::Vec3f &defaultValue=VisRTX::Vec3f(), bool *found=nullptr) const
Definition: Object.h:201
Definition: Backend.h:5
void SetVec3i(const std::string &id, int32_t x, int32_t y, int32_t z)
Definition: Object.h:179
bool GetObject(const std::vector< std::string > &ids, T **result, T *defaultValue=nullptr)
Definition: Object.h:104
void SetVec2f(const std::string &id, float x, float y)
Definition: Object.h:162
Object(RTWDataType type=RTW_OBJECT)
Definition: Object.h:21
float GetFloat(const std::vector< std::string > &ids, float defaultValue=0.0f, bool *found=nullptr) const
Definition: Object.h:133
bool GetInt(const std::vector< std::string > &ids, int32_t *result, int32_t defaultValue=0)
Definition: Object.h:121
void SetString(const std::string &id, const std::string &s)
Definition: Object.h:56