|
|
@@ -3,9 +3,9 @@ |
|
|
|
#define INI_CONFIG_IMPLEMENT_INT_TYPE(ID, T) \ |
|
|
|
typedef bool INI_ConfigValidate##ID(T); \ |
|
|
|
\ |
|
|
|
typedef T INI_ConfigDeserialize##ID(const char*); \ |
|
|
|
typedef T INI_ConfigDeserialize##ID(const char*, void*); \ |
|
|
|
\ |
|
|
|
typedef void INI_ConfigSerialize##ID(T, const char[128]); \ |
|
|
|
typedef void INI_ConfigSerialize##ID(T, const char[128], void*); \ |
|
|
|
\ |
|
|
|
void INI_ConfigEnsureValid##ID(INI_ConfigItem* item, T raw_value, T default_value) { \ |
|
|
|
T* dest = item->dest; \ |
|
|
@@ -21,7 +21,7 @@ void INI_ConfigEnsureValid##ID(INI_ConfigItem* item, T raw_value, T default_valu |
|
|
|
*dest = raw_value; \ |
|
|
|
} \ |
|
|
|
\ |
|
|
|
void INI_ConfigLoad##ID(INI_ConfigItem* item, const char* config_path) { \ |
|
|
|
void INI_ConfigLoad##ID(INI_ConfigItem* item, const char* config_path, void* item_array) { \ |
|
|
|
static T raw_value; \ |
|
|
|
static T default_value; \ |
|
|
|
default_value = *((T*) item->default_value); \ |
|
|
@@ -30,18 +30,18 @@ void INI_ConfigLoad##ID(INI_ConfigItem* item, const char* config_path) { \ |
|
|
|
INI_ConfigSerialize##ID* serialize = item->transformer.serialize; \ |
|
|
|
const char serialized_default_value[128]; \ |
|
|
|
if (default_value) { \ |
|
|
|
serialize(default_value, serialized_default_value); \ |
|
|
|
serialize(default_value, serialized_default_value, item_array); \ |
|
|
|
} \ |
|
|
|
char buffer[128]; \ |
|
|
|
ini_gets(item->section, item->key, serialized_default_value, buffer, 128, config_path); \ |
|
|
|
raw_value = deserialize(buffer); \ |
|
|
|
raw_value = deserialize(buffer, item_array); \ |
|
|
|
} else { \ |
|
|
|
raw_value = ini_getl(item->section, item->key, default_value, config_path); \ |
|
|
|
} \ |
|
|
|
INI_ConfigEnsureValid##ID(item, raw_value, default_value); \ |
|
|
|
} \ |
|
|
|
\ |
|
|
|
INI_ConfigSaveItemResult INI_ConfigSave##ID(INI_ConfigItem* item, const char* config_path) { \ |
|
|
|
INI_ConfigSaveItemResult INI_ConfigSave##ID(INI_ConfigItem* item, const char* config_path, void* item_array) { \ |
|
|
|
T dest = *((T*) item->dest); \ |
|
|
|
if (item->validator) { \ |
|
|
|
INI_ConfigValidate##ID* validate = item->validator; \ |
|
|
@@ -53,7 +53,7 @@ INI_ConfigSaveItemResult INI_ConfigSave##ID(INI_ConfigItem* item, const char* co |
|
|
|
if (item->transformer.deserialize && item->transformer.serialize) { \ |
|
|
|
INI_ConfigSerialize##ID* serialize = item->transformer.serialize; \ |
|
|
|
const char serialized_value[128]; \ |
|
|
|
serialize(dest, serialized_value); \ |
|
|
|
serialize(dest, serialized_value, item_array); \ |
|
|
|
if (!ini_puts(item->section, item->key, serialized_value, config_path)) { \ |
|
|
|
return -1; \ |
|
|
|
} \ |
|
|
|