aboutsummaryrefslogtreecommitdiff
path: root/Src/Agave/Config/ifc_configitem.h
diff options
context:
space:
mode:
Diffstat (limited to 'Src/Agave/Config/ifc_configitem.h')
-rw-r--r--Src/Agave/Config/ifc_configitem.h200
1 files changed, 200 insertions, 0 deletions
diff --git a/Src/Agave/Config/ifc_configitem.h b/Src/Agave/Config/ifc_configitem.h
new file mode 100644
index 00000000..7a0f5180
--- /dev/null
+++ b/Src/Agave/Config/ifc_configitem.h
@@ -0,0 +1,200 @@
+#ifndef NULLSOFT_AGAVE_IFC_CONFIGITEM_H
+#define NULLSOFT_AGAVE_IFC_CONFIGITEM_H
+
+#include <bfc/dispatch.h>
+#include <stddef.h>
+/*
+notes:
+The Set() functions are "public-facing", meaning that they can be called by anyone. If you want to make your config item read-only,
+then simply don't implement these. You can always make "private" Set functions in your implementation.
+
+SetStringInternal and GetStringInternal are written for use with classes to load and save from INI files (or XML files or whatever).
+It's up to you to figure out a clever way to encode yourself.
+
+*/
+
+enum
+{
+ CONFIG_ITEM_TYPE_STRING = 0,
+ CONFIG_ITEM_TYPE_INT = 1,
+ CONFIG_ITEM_TYPE_UNSIGNED =2,
+ CONFIG_ITEM_TYPE_BOOL =3,
+ CONFIG_ITEM_TYPE_BINARY =4,
+ CONFIG_ITEM_TYPE_INT_ARRAY = 5,
+};
+
+class ifc_configitem : public Dispatchable
+{
+protected:
+ ifc_configitem() {}
+ ~ifc_configitem() {}
+public:
+ const wchar_t *GetName();
+ int GetType();
+
+ const wchar_t *GetString();
+ void SetString(const wchar_t *stringValue);
+
+ intptr_t GetInt();
+ void SetInt(intptr_t intValue);
+
+ uintptr_t GetUnsigned();
+ void SetUnsigned(uintptr_t unsignedValue);
+
+ bool GetBool();
+ void SetBool(bool boolValue);
+
+ float GetFloat();
+ void SetFloat(float floatValue);
+
+ size_t GetBinarySize();
+ size_t GetBinaryData(void *data, size_t bytes); // returns bytes written
+ void SetBinaryData(void *data, size_t bytes);
+
+ size_t GetIntArrayElements();
+ size_t GetIntArray(intptr_t *array, size_t elements); // returns elements written
+ void SetIntArray(intptr_t *array, size_t elements);
+
+ const wchar_t *GetStringInternal(); // gets a string suitable for saving in an INI file or XML
+ void SetStringInternal(const wchar_t *internalString);
+
+public:
+ DISPATCH_CODES
+ {
+ IFC_CONFIGITEM_GETNAME = 10,
+ IFC_CONFIGITEM_GETTYPE = 20,
+
+ IFC_CONFIGITEM_GETSTRING= 30,
+ IFC_CONFIGITEM_SETSTRING= 40,
+
+ IFC_CONFIGITEM_GETINT= 50,
+ IFC_CONFIGITEM_SETINT= 60,
+
+ IFC_CONFIGITEM_GETUNSIGNED= 70,
+ IFC_CONFIGITEM_SETUNSIGNED= 80,
+
+ IFC_CONFIGITEM_GETBOOL= 90,
+ IFC_CONFIGITEM_SETBOOL= 100,
+
+ IFC_CONFIGITEM_GETBINARYSIZE= 110,
+ IFC_CONFIGITEM_GETBINARYDATA= 120,
+ IFC_CONFIGITEM_SETBINARYDATA= 130,
+
+ IFC_CONFIGITEM_GETINTARRAYELEMENTS= 140,
+ IFC_CONFIGITEM_GETINTARRAY= 150,
+ IFC_CONFIGITEM_SETINTARRAY= 160,
+
+ IFC_CONFIGITEM_GETSTRINGINTERNAL= 170,
+ IFC_CONFIGITEM_SETSTRINGINTERNAL= 180,
+
+ IFC_CONFIGITEM_GETFLOAT= 190,
+ IFC_CONFIGITEM_SETFLOAT= 200,
+ };
+};
+
+
+
+inline const wchar_t *ifc_configitem::GetName()
+{
+ return _call(IFC_CONFIGITEM_GETNAME, (const wchar_t *)0);
+}
+
+inline int ifc_configitem::GetType()
+{
+ return _call(IFC_CONFIGITEM_GETTYPE, (int)0);
+}
+
+inline const wchar_t *ifc_configitem::GetString()
+{
+ return _call(IFC_CONFIGITEM_GETSTRING, (const wchar_t *)0);
+}
+
+inline void ifc_configitem::SetString(const wchar_t *stringValue)
+{
+ _voidcall(IFC_CONFIGITEM_SETSTRING, stringValue);
+}
+
+
+inline intptr_t ifc_configitem::GetInt()
+{
+ return _call(IFC_CONFIGITEM_GETINT, (intptr_t)0);
+}
+#pragma warning(push)
+#pragma warning(disable: 4244)
+inline void ifc_configitem::SetInt(intptr_t intValue)
+{
+ _voidcall(IFC_CONFIGITEM_SETINT, intValue);
+}
+#pragma warning(pop)
+
+inline uintptr_t ifc_configitem::GetUnsigned()
+{
+ return _call(IFC_CONFIGITEM_GETUNSIGNED, (uintptr_t)0);
+}
+
+inline void ifc_configitem::SetUnsigned(uintptr_t unsignedValue)
+{
+ _voidcall(IFC_CONFIGITEM_SETUNSIGNED, unsignedValue);
+}
+
+
+inline bool ifc_configitem::GetBool()
+{
+ return _call(IFC_CONFIGITEM_GETBOOL, (bool)false);
+}
+
+inline void ifc_configitem::SetBool(bool boolValue)
+{
+ _voidcall(IFC_CONFIGITEM_SETBOOL, boolValue);
+}
+
+inline size_t ifc_configitem::GetBinarySize()
+{
+ return _call(IFC_CONFIGITEM_GETBINARYSIZE, (size_t)0);
+}
+
+inline size_t ifc_configitem::GetBinaryData(void *data, size_t bytes)
+{
+ return _call(IFC_CONFIGITEM_GETBINARYDATA, (size_t)0, data, bytes);
+}
+
+inline void ifc_configitem::SetBinaryData(void *data, size_t bytes)
+{
+ _voidcall(IFC_CONFIGITEM_SETBINARYDATA, data, bytes);
+}
+
+inline size_t ifc_configitem::GetIntArrayElements()
+{
+ return _call(IFC_CONFIGITEM_GETINTARRAYELEMENTS, (size_t)0);
+}
+
+inline size_t ifc_configitem::GetIntArray(intptr_t *array, size_t elements)
+{
+ return _call(IFC_CONFIGITEM_GETINTARRAY, (size_t)0, array, elements);
+}
+inline void ifc_configitem::SetIntArray(intptr_t *array, size_t elements)
+{
+ _voidcall(IFC_CONFIGITEM_SETINTARRAY, array, elements);
+}
+
+inline const wchar_t *ifc_configitem::GetStringInternal()
+{
+ return _call(IFC_CONFIGITEM_GETSTRINGINTERNAL, (const wchar_t *)0);
+}
+inline void ifc_configitem::SetStringInternal(const wchar_t *internalString)
+{
+ _voidcall(IFC_CONFIGITEM_SETSTRINGINTERNAL, internalString);
+}
+
+inline float ifc_configitem::GetFloat()
+{
+ return _call(IFC_CONFIGITEM_GETFLOAT, (float)0);
+}
+
+inline void ifc_configitem::SetFloat(float floatValue)
+{
+ _voidcall(IFC_CONFIGITEM_SETFLOAT, floatValue);
+}
+
+
+#endif \ No newline at end of file