8 #ifndef _RNBO_Patcherstate_H_
9 #define _RNBO_Patcherstate_H_
11 #include <unordered_map>
15 #include "RNBO_Debug.h"
16 #include "RNBO_String.h"
18 #include "RNBO_ExternalPtr.h"
19 #include "RNBO_PatcherEventTarget.h"
20 #include "RNBO_PatcherStateInterface.h"
21 #include "RNBO_List.h"
22 #include "RNBO_DataRef.h"
24 #include "3rdparty/MPark_variant/variant.hpp"
30 using StateMapPtr = std::shared_ptr<PatcherState>;
31 using SubStateMapType = std::unordered_map<Index,std::shared_ptr<ValueHolder> >;
32 using SubStateMapPtr = std::shared_ptr<SubStateMapType>;
108 ValueHolder(PatcherEventTarget* patcherEventTarget);
156 explicit operator float()
const;
157 explicit operator double()
const;
158 explicit operator Int()
const;
159 explicit operator UInt32()
const;
160 explicit operator UInt64()
const;
161 explicit operator bool()
const;
162 explicit operator PatcherEventTarget*();
163 explicit operator signal();
165 operator ExternalPtr();
166 operator const list&()
const;
168 operator MultiDataRef&();
169 operator const char*()
const;
190 void allocateSubState();
191 void allocateSubStateMap();
214 using StateMap = std::unordered_map<String, ValueHolder, StringHasher>;
227 using Iterator =
typename StateMap::iterator;
228 using ConstIterator =
typename StateMap::const_iterator;
240 ConstIterator begin()
const
245 ConstIterator end()
const
267 StateHelper<PatcherState> operator[](
const char* key) {
268 StateHelper<PatcherState> helper(key, *
this);
272 virtual bool isDummy()
const {
return false; }
276 friend class StateHelper<PatcherState>;
278 void add(
const char* key,
float val)
override;
279 void add(
const char* key,
double val)
override;
280 void add(
const char* key, Int val)
override;
281 void add(
const char* key, UInt32 val)
override;
282 void add(
const char* key, UInt64 val)
override;
283 void add(
const char* key,
bool val)
override;
284 void add(
const char* key, ExternalPtr& ext)
override;
285 void add(
const char* key, PatcherEventTarget* patcherEventTarget)
override;
286 void add(
const char* key,
const list& theList)
override;
287 void add(
const char* key, DataRef& dataRef)
override;
288 void add(
const char* key, MultiDataRef& dataRef)
override;
289 void add(
const char* key, signal sig)
override;
290 void add(
const char* key,
const char* str)
override;
291 void add(
const char* key, SerializedBuffer& data)
override;
293 float getFloat(
const char* key)
override;
294 double getDouble(
const char* key)
override;
295 Int getInt(
const char* key)
override;
296 UInt32 getUInt32(
const char* key)
override;
297 UInt64 getUInt64(
const char* key)
override;
298 bool getBool(
const char* key)
override;
299 ExternalPtr getExternalPtr(
const char* key)
override;
300 PatcherEventTarget* getEventTarget(
const char* key)
override;
301 const PatcherState&
getSubState(
const char* key)
const override;
302 const PatcherState&
getSubStateAt(
const char* key, Index i)
const override;
303 bool isEmpty()
const override;
304 list getList(
const char* key)
override;
305 DataRef& getDataRef(
const char *key)
override;
306 MultiDataRef& getMultiDataRef(
const char *key)
override;
307 signal getSignal(
const char *key)
override;
308 const char* getString(
const char *key)
override;
309 SerializedBuffer& getBuffer(
const char *key)
override;
311 bool containsValue(
const char* key)
const override;
318 #endif // _RNBO_Patcherstate_H_