8 #ifndef _RNBO_Patcherstate_H_
9 #define _RNBO_Patcherstate_H_
11 #include <unordered_map>
15 #include "RNBO_String.h"
17 #include "RNBO_ExternalPtr.h"
18 #include "RNBO_PatcherEventTarget.h"
19 #include "RNBO_PatcherStateInterface.h"
20 #include "RNBO_List.h"
21 #include "RNBO_DataRef.h"
22 #include "RNBO_Debug.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>;
107 ValueHolder(PatcherEventTarget* patcherEventTarget);
139 explicit operator float()
const;
140 explicit operator double()
const;
141 explicit operator Int()
const;
142 explicit operator UInt32()
const;
143 explicit operator UInt64()
const;
144 explicit operator bool()
const;
145 explicit operator PatcherEventTarget*();
146 explicit operator signal();
148 operator ExternalPtr();
149 operator const list&()
const;
151 operator MultiDataRef&();
152 operator const char*()
const;
172 void allocateSubState();
173 void allocateSubStateMap();
195 using StateMap = std::unordered_map<String, ValueHolder, StringHasher>;
204 using Iterator =
typename StateMap::iterator;
205 using ConstIterator =
typename StateMap::const_iterator;
217 ConstIterator begin()
const
222 ConstIterator end()
const
244 StateHelper<PatcherState> operator[](
const char* key) {
245 StateHelper<PatcherState> helper(key, *
this);
249 virtual bool isDummy()
const {
return false; }
253 friend class StateHelper<PatcherState>;
255 void add(
const char* key,
float val)
override;
256 void add(
const char* key,
double val)
override;
257 void add(
const char* key, Int val)
override;
258 void add(
const char* key, UInt32 val)
override;
259 void add(
const char* key, UInt64 val)
override;
260 void add(
const char* key,
bool val)
override;
261 void add(
const char* key, ExternalPtr& ext)
override;
262 void add(
const char* key, PatcherEventTarget* patcherEventTarget)
override;
263 void add(
const char* key,
const list& theList)
override;
264 void add(
const char* key, DataRef& dataRef)
override;
265 void add(
const char* key, MultiDataRef& dataRef)
override;
266 void add(
const char* key, signal sig)
override;
267 void add(
const char* key,
const char* str)
override;
269 float getFloat(
const char* key)
override;
270 double getDouble(
const char* key)
override;
271 Int getInt(
const char* key)
override;
272 UInt32 getUInt32(
const char* key)
override;
273 UInt64 getUInt64(
const char* key)
override;
274 bool getBool(
const char* key)
override;
275 ExternalPtr getExternalPtr(
const char* key)
override;
276 PatcherEventTarget* getEventTarget(
const char* key)
override;
277 const PatcherState&
getSubState(
const char* key)
const override;
278 const PatcherState&
getSubStateAt(
const char* key, Index i)
const override;
279 bool isEmpty()
const override;
280 list getList(
const char* key)
override;
281 DataRef& getDataRef(
const char *key)
override;
282 MultiDataRef& getMultiDataRef(
const char *key)
override;
283 signal getSignal(
const char *key)
override;
284 const char* getString(
const char *key)
override;
286 bool containsValue(
const char* key)
const override;
293 #endif // _RNBO_Patcherstate_H_