BltRegistry.h

Go to the documentation of this file.
00001 /*****************************************************************
00002 |
00003 |   BlueTune - Registry API
00004 |
00005 |   (c) 2002-2006 Gilles Boccon-Gibod
00006 |   Author: Gilles Boccon-Gibod (bok@bok.net)
00007 |
00008  ****************************************************************/
00013 #ifndef _BLT_REGISTRY_H_
00014 #define _BLT_REGISTRY_H_
00015 
00016 /*----------------------------------------------------------------------
00017 |   includes
00018 +---------------------------------------------------------------------*/
00019 #include "Atomix.h"
00020 #include "BltDefs.h"
00021 #include "BltTypes.h"
00022 #include "BltErrors.h"
00023 #include "BltMedia.h"
00024 
00025 /*----------------------------------------------------------------------
00026 |   types
00027 +---------------------------------------------------------------------*/
00028 typedef struct BLT_RegistryKey BLT_RegistryKey;
00029 
00030 typedef enum {
00031     BLT_REGISTRY_VALUE_TYPE_NONE,
00032     BLT_REGISTRY_VALUE_TYPE_STRING,
00033     BLT_REGISTRY_VALUE_TYPE_INTEGER,
00034     BLT_REGISTRY_VALUE_TYPE_BOOLEAN,
00035     BLT_REGISTRY_VALUE_TYPE_RAW_DATA
00036 } BLT_RegistryValueType;
00037 
00038 typedef struct {
00039     BLT_Size size;
00040     BLT_Any  buffer;
00041 } BLT_RegistryRawData;
00042 
00043 typedef union {
00044     BLT_CString         string;
00045     BLT_Boolean         boolean;
00046     BLT_UInt32          integer;
00047     BLT_RegistryRawData data;
00048 } BLT_RegistryValue;
00049 
00050 /*----------------------------------------------------------------------
00051 |   constants
00052 +---------------------------------------------------------------------*/
00053 #define BLT_REGISTRY_KEY_ROOT                       ((BLT_RegistryKey*)0)
00054 #define BLT_REGISTRY_KEY_PUBLIC                     "BLT_PUBLIC"
00055 #define BLT_REGISTRY_KEY_PRIVATE                    "BLT_PRIVATE"
00056 #define BLT_REGISTRY_NAME_CATEGORY_MEDIA_TYPE_IDS   "MediaTypes"
00057 
00058 #define BLT_ERROR_NO_SUCH_KEY             (BLT_ERROR_BASE_REGISTRY - 0)
00059 #define BLT_ERROR_KEY_VALUE_TYPE_MISMATCH (BLT_ERROR_BASE_REGISTRY - 1)
00060 
00061 /*----------------------------------------------------------------------
00062 |   BLT_Registry Interface
00063 +---------------------------------------------------------------------*/
00064 ATX_DECLARE_INTERFACE(BLT_Registry)
00069 ATX_BEGIN_INTERFACE_DEFINITION(BLT_Registry)
00070     BLT_Result (*CreateKey)(BLT_Registry*     self,
00071                             BLT_RegistryKey*  parent,
00072                             BLT_CString       name,
00073                             BLT_RegistryKey** key);
00074 
00075     BLT_Result (*DestroyKey)(BLT_Registry*    self,
00076                              BLT_RegistryKey* key);
00077 
00078     BLT_Result (*GetKey)(BLT_Registry*     self,
00079                          BLT_RegistryKey*  parent,
00080                          BLT_CString       name,
00081                          BLT_RegistryKey** key);
00082 
00083     BLT_Result (*SetKeyValue)(BLT_Registry*         self,
00084                               BLT_RegistryKey*      parent,
00085                               BLT_CString           name,
00086                               BLT_RegistryValueType value_type,
00087                               BLT_RegistryValue*    value);
00088 
00089     BLT_Result (*GetKeyValue)(BLT_Registry*          self,
00090                               BLT_RegistryKey*       parent,
00091                               BLT_CString            name,
00092                               BLT_RegistryValueType* value_type,
00093                               BLT_RegistryValue*     value);
00094     BLT_Result (*RegisterName)(BLT_Registry*         self, 
00095                                BLT_CString           category,
00096                                BLT_CString           name,
00097                                BLT_UInt32*           id);
00098     BLT_Result (*GetNameForId)(BLT_Registry*         self, 
00099                                BLT_CString           category,
00100                                BLT_UInt32            id,
00101                                BLT_CString*          name);
00102     BLT_Result (*GetIdForName)(BLT_Registry*         self, 
00103                                BLT_CString           category,
00104                                BLT_CString           name,
00105                                BLT_UInt32*           id);
00106     BLT_Result (*RegisterExtension)(BLT_Registry*         self,
00107                                     BLT_CString           extension,
00108                                     BLT_CString           media_type);
00109     BLT_Result (*GetMediaTypeIdForExtension)(BLT_Registry*    self,
00110                                              BLT_CString      extension,
00111                                              BLT_MediaTypeId* type_id);
00112 ATX_END_INTERFACE_DEFINITION
00113 
00114 /*----------------------------------------------------------------------
00115 |   convenience macros
00116 +---------------------------------------------------------------------*/
00117 #define BLT_Registry_CreateKey(object, parent, name, key) \
00118 ATX_INTERFACE(object)->CreateKey(object, parent, name, key)
00119 
00120 #define BLT_Registry_DestroyKey(object, key) \
00121 ATX_INTERFACE(object)->DestroyKey(object, key)
00122 
00123 #define BLT_Registry_GetKey(object, parent, name, key) \
00124 ATX_INTERFACE(object)->GetKey(object, parent, name, key)
00125 
00126 #define BLT_Registry_SetKeyValue(object, parent, name, value_type, value) \
00127 ATX_INTERFACE(object)->SetKeyValue(object, \
00128 parent, name, value_type, value)
00129 
00130 #define BLT_Registry_GetKeyValue(object, parent, name, value_type, value) \
00131 ATX_INTERFACE(object)->GetKeyValue(object, \
00132 parent, name, value_type, value)
00133 
00134 #define BLT_Registry_RegisterName(object, category, name, id) \
00135 ATX_INTERFACE(object)->RegisterName(object, category, \
00136 name, id)
00137 
00138 #define BLT_Registry_GetNameForId(object, category, name, id) \
00139 ATX_INTERFACE(object)->GetNameForId(object, category, name, id)
00140 
00141 #define BLT_Registry_GetIdForName(object, category, name, id) \
00142 ATX_INTERFACE(object)->GetIdForName(object, category, \
00143 name, id)
00144 
00145 #define BLT_Registry_RegisterExtension(object, extension, media_type) \
00146 ATX_INTERFACE(object)->RegisterExtension(object, \
00147 extension, media_type)
00148 
00149 #define BLT_Registry_GetMediaTypeIdForExtension(object, extension, type_id) \
00150 ATX_INTERFACE(object)->GetMediaTypeIdForExtension(object, \
00151 extension, type_id)
00152 
00153 #define BLT_Registry_Destroy(object) ATX_DESTROY_OBJECT(object)
00154 
00155 #endif /* _BLT_REGISTRY_H_ */