diff options
author | Jef <jef@targetspot.com> | 2024-09-24 08:54:57 -0400 |
---|---|---|
committer | Jef <jef@targetspot.com> | 2024-09-24 08:54:57 -0400 |
commit | 20d28e80a5c861a9d5f449ea911ab75b4f37ad0d (patch) | |
tree | 12f17f78986871dd2cfb0a56e5e93b545c1ae0d0 /Src/Agave/Config/api_config.h | |
parent | 537bcbc86291b32fc04ae4133ce4d7cac8ebe9a7 (diff) | |
download | winamp-20d28e80a5c861a9d5f449ea911ab75b4f37ad0d.tar.gz |
Initial community commit
Diffstat (limited to 'Src/Agave/Config/api_config.h')
-rw-r--r-- | Src/Agave/Config/api_config.h | 135 |
1 files changed, 135 insertions, 0 deletions
diff --git a/Src/Agave/Config/api_config.h b/Src/Agave/Config/api_config.h new file mode 100644 index 00000000..d71885d6 --- /dev/null +++ b/Src/Agave/Config/api_config.h @@ -0,0 +1,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
\ No newline at end of file |