aboutsummaryrefslogtreecommitdiff
path: root/Src/Agave/Config/api_config.h
blob: d71885d638d1763581a982693c6c2960d9276f1b (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
#ifndef NULLSOFT_AGAVE_API_CONFIG_H
#define NULLSOFT_AGAVE_API_CONFIG_H

#include "bfc/dispatch.h"

#include "ifc_configgroup.h"

enum
{
	CONFIG_SUCCESS       = 0,
	CONFIG_FAILURE       = 1,
	CONFIG_GROUPNOTFOUND = 2,
	CONFIG_ITEMNOTFOUND  = 3,
};

class api_config : public Dispatchable
{
protected:
	api_config()                                                      {}
	~api_config()                                                     {}

public:
	ifc_configgroup *GetGroup( GUID groupGUID );
	void RegisterGroup( ifc_configgroup *newGroup );

	/* Shortcut methods */
	bool            GetBool( GUID groupGUID, const wchar_t *configItem, bool defaultValue );
	uintptr_t       GetUnsigned( GUID groupGUID, const wchar_t *configItem, uintptr_t defaultValue );
	intptr_t        GetInt( GUID groupGUID, const wchar_t *configItem, intptr_t defaultValue );
	float           GetFloat( GUID groupGUID, const wchar_t *configItem, float defaultValue );
	const wchar_t  *GetString( GUID groupGUID, const wchar_t *configItem, const wchar_t *defaultValue );
	ifc_configitem *GetItem( GUID groupGUID, const wchar_t *configItem );

	DISPATCH_CODES
	{
		API_CONFIG_GETGROUP      = 10,
		API_CONFIG_REGISTERGROUP = 20,
	};
};

inline ifc_configgroup *api_config::GetGroup( GUID groupGUID )
{
	return _call( API_CONFIG_GETGROUP, (ifc_configgroup *)0, groupGUID );
}

inline void api_config::RegisterGroup( ifc_configgroup *newGroup )
{
	_voidcall( API_CONFIG_REGISTERGROUP, newGroup );
}

inline bool api_config::GetBool( GUID groupGUID, const wchar_t *configItem, bool defaultValue )
{
	ifc_configgroup *group = GetGroup( groupGUID );
	if ( group )
	{
		ifc_configitem *item = group->GetItem( configItem );
		if ( item )
			return item->GetBool();
	}

	return defaultValue;
}

inline uintptr_t api_config::GetUnsigned( GUID groupGUID, const wchar_t *configItem, uintptr_t defaultValue )
{
	ifc_configgroup *group = GetGroup( groupGUID );
	if ( group )
	{
		ifc_configitem *item = group->GetItem( configItem );
		if ( item )
			return item->GetUnsigned();
	}

	return defaultValue;
}

inline intptr_t api_config::GetInt( GUID groupGUID, const wchar_t *configItem, intptr_t defaultValue )
{
	ifc_configgroup *group = GetGroup( groupGUID );
	if ( group )
	{
		ifc_configitem *item = group->GetItem( configItem );
		if ( item )
			return item->GetInt();
	}

	return defaultValue;
}

inline float api_config::GetFloat( GUID groupGUID, const wchar_t *configItem, float defaultValue )
{
	ifc_configgroup *group = GetGroup( groupGUID );
	if ( group )
	{
		ifc_configitem *item = group->GetItem( configItem );
		if ( item )
			return item->GetFloat();
	}

	return defaultValue;
}

inline const wchar_t *api_config::GetString( GUID groupGUID, const wchar_t *configItem, const wchar_t *defaultValue )
{
	ifc_configgroup *group = GetGroup( groupGUID );
	if ( group )
	{
		ifc_configitem *item = group->GetItem( configItem );
		if ( item )
			return item->GetString();
	}

	return defaultValue;
}

inline ifc_configitem *api_config::GetItem( GUID groupGUID, const wchar_t *configItem )
{
	ifc_configgroup *group = GetGroup( groupGUID );
	if ( group )
		return group->GetItem( configItem );

	return 0;
}

// {AEFBF8BE-E0AA-4318-8CC1-4353410B64DC}
static const GUID AgaveConfigGUID =
{ 0xaefbf8be, 0xe0aa, 0x4318, { 0x8c, 0xc1, 0x43, 0x53, 0x41, 0xb, 0x64, 0xdc } };

extern api_config *configApi;

#ifndef AGAVE_API_CONFIG
#define AGAVE_API_CONFIG configApi
#endif // !AGAVE_API_CONFIG

#endif