winamp/Src/Agave/Config/api_config.h
2024-09-24 14:54:57 +02:00

135 lines
3.4 KiB
C++

#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