most config fixed, still need to do a bunch more testing
This commit is contained in:
parent
2b2e40921d
commit
5e6ee54473
7 changed files with 730 additions and 424 deletions
|
|
@ -28,6 +28,11 @@ typedef struct ARC_ConfigTypeTemplate {
|
|||
void *data;
|
||||
} ARC_ConfigTypeTemplate;
|
||||
|
||||
typedef struct ARC_ConfigDeleteKeyArgs {
|
||||
ARC_Config *config;
|
||||
ARC_String *string;
|
||||
} ARC_ConfigDeleteKeyArgs;
|
||||
|
||||
int8_t ARC_Config_KeyComp(void *key1, size_t *key1size, void *key2, size_t *key2size);
|
||||
|
||||
void ARC_Config_CreateGroup(ARC_Config *config, ARC_String *name);
|
||||
|
|
@ -76,12 +81,22 @@ void ARC_Config_Create(ARC_Config **config){
|
|||
}
|
||||
|
||||
void ARC_Config_Destroy(ARC_Config *config){
|
||||
ARC_Hashtable_Destroy(config->groups, ARC_Config_DestroyGroup, (void *)&config);
|
||||
ARC_Hashtable_Destroy(config->keys , ARC_Config_RemoveKey , NULL );
|
||||
ARC_ConfigDeleteKeyArgs keyArgs = {
|
||||
.config = config,
|
||||
.string = NULL,
|
||||
};
|
||||
|
||||
ARC_Hashtable_Destroy(config->groups, ARC_Config_DestroyGroup, (void *)&keyArgs);
|
||||
ARC_Hashtable_Destroy(config->keys , ARC_Config_RemoveKey , NULL );
|
||||
free(config);
|
||||
}
|
||||
|
||||
//TODO: fix NULL group
|
||||
void ARC_Config_SetGroup(ARC_Config *config, ARC_String *groupname){
|
||||
if(!config){
|
||||
return;
|
||||
}
|
||||
|
||||
if(groupname == NULL){
|
||||
ARC_Hashtable_Get(config->groups, (void *)" ", 1, (void **)&(config->currgroup));
|
||||
return;
|
||||
|
|
@ -107,11 +122,7 @@ void ARC_Config_SetGroup(ARC_Config *config, ARC_String *groupname){
|
|||
void ARC_Config_Get(ARC_Config *config, ARC_String *keyname, void **value){
|
||||
ARC_ConfigTypeTemplate *temp;
|
||||
|
||||
ARC_String *separator;
|
||||
ARC_String_Create(&separator, "::", 2);
|
||||
uint64_t length = ARC_String_Find(keyname, separator);
|
||||
ARC_String_Destroy(separator);
|
||||
|
||||
uint64_t length = ARC_String_FindCString(keyname, "::", 2);
|
||||
if(arc_errno){
|
||||
//TODO: Debug info here
|
||||
*value = NULL;
|
||||
|
|
@ -119,8 +130,12 @@ void ARC_Config_Get(ARC_Config *config, ARC_String *keyname, void **value){
|
|||
}
|
||||
|
||||
if(length != ~((uint64_t)0)){
|
||||
ARC_String *group;
|
||||
ARC_String_CopySubstring(&group, keyname, 0, length);
|
||||
length--;
|
||||
ARC_String *group = NULL;
|
||||
|
||||
if(length != 0){
|
||||
ARC_String_CopySubstring(&group, keyname, 0, length);
|
||||
}
|
||||
|
||||
ARC_Hashtable *currgroup = config->currgroup;
|
||||
ARC_Config_SetGroup(config, group);
|
||||
|
|
@ -132,14 +147,22 @@ void ARC_Config_Get(ARC_Config *config, ARC_String *keyname, void **value){
|
|||
|
||||
ARC_String *name;
|
||||
ARC_String_CopySubstring(&name, keyname, length + 2, keyname->length - (length + 2));
|
||||
|
||||
ARC_Hashtable_Get(config->currgroup, (void *)name->data, name->length, (void **)&temp);
|
||||
ARC_String_Destroy(name);
|
||||
|
||||
config->currgroup = currgroup;
|
||||
if(group){
|
||||
ARC_String_Destroy(group);
|
||||
}
|
||||
*value = temp->data;
|
||||
return;
|
||||
}
|
||||
|
||||
if(!keyname){
|
||||
*value = NULL;
|
||||
return;
|
||||
}
|
||||
|
||||
ARC_Hashtable_Get(config->currgroup, (void *)keyname->data, keyname->length, (void **)&temp);
|
||||
if(arc_errno || temp == NULL){
|
||||
*value = NULL;
|
||||
|
|
@ -163,12 +186,12 @@ void ARC_Config_SetKeyGroup(ARC_Config *config, ARC_String **data, uint8_t *comm
|
|||
}
|
||||
|
||||
ARC_String *name, *temp;
|
||||
ARC_String_CopySubstring(&temp, *data, index, nextIndex);
|
||||
ARC_String_CopySubstring(&temp, *data, index, nextIndex - index - 1);
|
||||
ARC_String_StripEndsWhitespace(temp, &name);
|
||||
ARC_String_Destroy(temp);
|
||||
|
||||
temp = *data;
|
||||
ARC_String_RemoveSection(data, temp, nextIndex + 1, (*data)->length - (nextIndex + 1));
|
||||
ARC_String_CopySubstring(data, temp, nextIndex + 1, (*data)->length - (nextIndex + 1));
|
||||
ARC_String_Destroy(temp);
|
||||
|
||||
ARC_Config_Recurse(config, data, name, command);
|
||||
|
|
@ -199,13 +222,19 @@ void ARC_Config_LoadFromKey(ARC_Config *config, ARC_String *keyType, ARC_String
|
|||
return;
|
||||
}
|
||||
|
||||
char *nameval = (char *)malloc(sizeof(char) * name->length);
|
||||
char *nameval = (char *)malloc(sizeof(char) * name->length + 1);
|
||||
strncpy(nameval, name->data, name->length);
|
||||
nameval[name->length] = '\0';
|
||||
ARC_Hashtable_Add(config->currgroup, nameval, name->length, (void *)templateVal);
|
||||
}
|
||||
|
||||
void ARC_Config_UnloadFromKey(ARC_Config *config, ARC_String *keyType, ARC_String *name){
|
||||
ARC_Hashtable_Remove(config->currgroup, name->data, name->length, ARC_Config_DestroyGroupNode, &config);
|
||||
void ARC_Config_UnloadFromKey(ARC_Config *config, ARC_String *keyType, ARC_String *name, ARC_String *value){
|
||||
ARC_ConfigDeleteKeyArgs keyArgs = {
|
||||
.config = config,
|
||||
.string = value,
|
||||
};
|
||||
|
||||
ARC_Hashtable_Remove(config->currgroup, name->data, name->length, ARC_Config_DestroyGroupNode, &keyArgs);
|
||||
}
|
||||
|
||||
void ARC_Config_GetNameAndValue(ARC_String *data, ARC_String **name, ARC_String **value){
|
||||
|
|
@ -223,7 +252,9 @@ void ARC_Config_GetNameAndValue(ARC_String *data, ARC_String **name, ARC_String
|
|||
ARC_String_StripEndsWhitespace(dataTemp, name);
|
||||
ARC_String_Destroy(dataTemp);
|
||||
|
||||
ARC_String_CopySubstring(value, data, index, data->length - index);
|
||||
ARC_String_CopySubstring(&dataTemp, data, index, data->length - index);
|
||||
ARC_String_StripEndsWhitespace(dataTemp, value);
|
||||
ARC_String_Destroy(dataTemp);
|
||||
}
|
||||
|
||||
void ARC_Config_Recurse(ARC_Config *config, ARC_String **data, ARC_String *groupstr, uint8_t *command){
|
||||
|
|
@ -268,6 +299,7 @@ void ARC_Config_Recurse(ARC_Config *config, ARC_String **data, ARC_String *group
|
|||
if(ARC_String_EqualsCString(keyType, "group", 5)){
|
||||
ARC_Config_SetKeyGroup(config, data, command);
|
||||
ARC_String_Destroy(keyType);
|
||||
config->currgroup = group;
|
||||
if(arc_errno){
|
||||
return;
|
||||
}
|
||||
|
|
@ -329,7 +361,7 @@ void ARC_Config_Recurse(ARC_Config *config, ARC_String **data, ARC_String *group
|
|||
|
||||
// unload from key
|
||||
if(*command == ARC_CONFIG_FILE_IO_UNLOAD){
|
||||
ARC_Config_UnloadFromKey(config, keyType, name);
|
||||
ARC_Config_UnloadFromKey(config, keyType, name, value);
|
||||
|
||||
ARC_String_Destroy(keyType);
|
||||
ARC_String_Destroy(name );
|
||||
|
|
@ -354,13 +386,16 @@ void ARC_Config_Recurse(ARC_Config *config, ARC_String **data, ARC_String *group
|
|||
}
|
||||
|
||||
void ARC_Config_StripComment(ARC_String *original, ARC_String **stripped, ARC_String *lineStart, ARC_String *lineEnd){
|
||||
ARC_String *current;
|
||||
ARC_String *current = NULL;
|
||||
ARC_String_Copy(¤t, original);
|
||||
|
||||
uint64_t index = ARC_String_Find(current, lineStart);
|
||||
uint64_t index = ARC_String_Find(original, lineStart);
|
||||
while(index != ~(uint64_t)0){
|
||||
ARC_String *commentString;
|
||||
ARC_String_CopySubstring(&commentString, current, index + lineStart->length, current->length - (index + lineStart->length));
|
||||
|
||||
uint64_t endIndex = ARC_String_Find(current, lineEnd);
|
||||
uint64_t endIndex = ARC_String_Find(commentString, lineEnd);
|
||||
ARC_String_Destroy(commentString);
|
||||
if(endIndex == ~(uint64_t)0){
|
||||
ARC_DEBUG_ERR("ARC_Config_RemoveComments(original, commentRemoved); No newline found when stripping single line comment");
|
||||
arc_errno = ARC_ERRNO_DATA;
|
||||
|
|
@ -370,7 +405,7 @@ void ARC_Config_StripComment(ARC_String *original, ARC_String **stripped, ARC_St
|
|||
}
|
||||
|
||||
ARC_String *currentTemp = current;
|
||||
ARC_String_RemoveSection(¤t, currentTemp, index, endIndex - index);
|
||||
ARC_String_RemoveSection(¤t, currentTemp, index, endIndex + lineStart->length + lineEnd->length);
|
||||
ARC_String_Destroy(currentTemp);
|
||||
|
||||
index = ARC_String_Find(current, lineStart);
|
||||
|
|
@ -487,7 +522,7 @@ void ARC_Config_FileIO(ARC_Config *config, ARC_String *path, uint8_t command){
|
|||
return;
|
||||
}
|
||||
|
||||
char *tempData = (char *)malloc((char) data->length + 1);
|
||||
char *tempData = (char *)malloc(sizeof(char) * (data->length + 1));
|
||||
strncpy(tempData, data->data, data->length);
|
||||
tempData[data->length] = '\n';
|
||||
|
||||
|
|
@ -547,9 +582,9 @@ void ARC_Config_DestroyGroupNode(ARC_HashtableNode *node, void *userdata){
|
|||
|
||||
ARC_ConfigTypeTemplate *temp = (ARC_ConfigTypeTemplate *)node->data;
|
||||
if(temp->Delete && temp->data && userdata){
|
||||
ARC_Config *config = (ARC_Config *)userdata;
|
||||
ARC_ConfigDeleteKeyArgs *args = (ARC_ConfigDeleteKeyArgs *)userdata;
|
||||
|
||||
temp->Delete(config, temp->data);
|
||||
temp->Delete(args->config, args->string, temp->data);
|
||||
}
|
||||
|
||||
free(temp);
|
||||
|
|
|
|||
|
|
@ -11,102 +11,182 @@
|
|||
#include <string.h>
|
||||
|
||||
void ARC_Defaults_ConfigKey_Create(ARC_Config *config){
|
||||
|
||||
ARC_Config_AddKeyCString(config, "uint8_t" , 7, ARC_ConfigKey_Read_Uint8_t , ARC_ConfigKey_Delete_Uint8_t );
|
||||
// ARC_Config_AddKeyCString(config, "int8_t" , ARC_ConfigKey_Read_Int8_t , ARC_ConfigKey_Delete_Int8_t );
|
||||
// ARC_Config_AddKeyCString(config, "char" , ARC_ConfigKey_Read_Char , ARC_ConfigKey_Delete_Char );
|
||||
// ARC_Config_AddKeyCString(config, "uint16_t", ARC_ConfigKey_Read_Uint16_t , ARC_ConfigKey_Delete_Uint16_t );
|
||||
// ARC_Config_AddKeyCString(config, "int16_t" , ARC_ConfigKey_Read_Int16_t , ARC_ConfigKey_Delete_Int16_t );
|
||||
// ARC_Config_AddKeyCString(config, "uint32_t", ARC_ConfigKey_Read_Uint32_t , ARC_ConfigKey_Delete_Uint32_t );
|
||||
// ARC_Config_AddKeyCString(config, "int32_t" , ARC_ConfigKey_Read_Int32_t , ARC_ConfigKey_Delete_Int32_t );
|
||||
// ARC_Config_AddKeyCString(config, "int" , ARC_ConfigKey_Read_Int , ARC_ConfigKey_Delete_Int );
|
||||
// ARC_Config_AddKeyCString(config, "uint64_t", ARC_ConfigKey_Read_Uint64_t , ARC_ConfigKey_Delete_Uint64_t );
|
||||
// ARC_Config_AddKeyCString(config, "int64_t" , ARC_ConfigKey_Read_Int64_t , ARC_ConfigKey_Delete_Int64_t );
|
||||
// ARC_Config_AddKeyCString(config, "long" , ARC_ConfigKey_Read_Long , ARC_ConfigKey_Delete_Long );
|
||||
// ARC_Config_AddKeyCString(config, "string" , ARC_ConfigKey_Read_String , ARC_ConfigKey_Delete_String );
|
||||
ARC_Config_AddKeyCString(config, "int8_t" , 6, ARC_ConfigKey_Read_Int8_t , ARC_ConfigKey_Delete_Int8_t );
|
||||
ARC_Config_AddKeyCString(config, "uint16_t", 8, ARC_ConfigKey_Read_Uint16_t , ARC_ConfigKey_Delete_Uint16_t );
|
||||
ARC_Config_AddKeyCString(config, "int16_t" , 7, ARC_ConfigKey_Read_Int16_t , ARC_ConfigKey_Delete_Int16_t );
|
||||
ARC_Config_AddKeyCString(config, "uint32_t", 8, ARC_ConfigKey_Read_Uint32_t , ARC_ConfigKey_Delete_Uint32_t );
|
||||
ARC_Config_AddKeyCString(config, "int32_t" , 7, ARC_ConfigKey_Read_Int32_t , ARC_ConfigKey_Delete_Int32_t );
|
||||
ARC_Config_AddKeyCString(config, "uint64_t", 8, ARC_ConfigKey_Read_Uint64_t , ARC_ConfigKey_Delete_Uint64_t );
|
||||
ARC_Config_AddKeyCString(config, "int64_t" , 7, ARC_ConfigKey_Read_Int64_t , ARC_ConfigKey_Delete_Int64_t );
|
||||
// ARC_Config_AddKeyCString(config, "char" , 4, ARC_ConfigKey_Read_Char , ARC_ConfigKey_Delete_Char );
|
||||
ARC_Config_AddKeyCString(config, "int" , 3, ARC_ConfigKey_Read_Int , ARC_ConfigKey_Delete_Int );
|
||||
ARC_Config_AddKeyCString(config, "long" , 4, ARC_ConfigKey_Read_Long , ARC_ConfigKey_Delete_Long );
|
||||
ARC_Config_AddKeyCString(config, "float" , 5, ARC_ConfigKey_Read_Float , ARC_ConfigKey_Delete_Float );
|
||||
ARC_Config_AddKeyCString(config, "double" , 6, ARC_ConfigKey_Read_Double , ARC_ConfigKey_Delete_Double );
|
||||
ARC_Config_AddKeyCString(config, "string" , 6, ARC_ConfigKey_Read_String , ARC_ConfigKey_Delete_String );
|
||||
// ARC_Config_AddKeyCString(config, "string[]", ARC_ConfigKey_Read_StringArray, ARC_ConfigKey_Delete_StringArray);
|
||||
}
|
||||
|
||||
uint8_t ARC_ConfigKey_Read_Uint8_t(ARC_Config* config, ARC_String *string, void **value){
|
||||
ARC_String *current;
|
||||
ARC_String_StripEndsWhitespace(string, ¤t);
|
||||
|
||||
ARC_Config_Get(config, current, value);
|
||||
ARC_Config_Get(config, string, value);
|
||||
if(*value){
|
||||
ARC_String_Destroy(current);
|
||||
return 1;
|
||||
}
|
||||
|
||||
*value = (uint8_t *) malloc(sizeof(uint8_t));
|
||||
*((uint8_t *)(*value)) = (uint8_t) ARC_String_ToUint64_t(current);
|
||||
ARC_String_Destroy(current);
|
||||
*((uint8_t *)(*value)) = (uint8_t) ARC_String_ToUint64_t(string);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
void ARC_ConfigKey_Read_Int8_t(ARC_Config* config, ARC_String *string, void **value){
|
||||
*value = (int8_t *) malloc(sizeof(int8_t));
|
||||
*((int8_t *)(*value)) = (int8_t) ARC_String_ToUint64_t(string);
|
||||
}
|
||||
|
||||
void ARC_ConfigKey_Read_Char(ARC_Config* config, ARC_String *string, void **value){
|
||||
*value = (char *) malloc(sizeof(char));
|
||||
*((char *)(* value)) = (char) *(data + subdata->index);
|
||||
}
|
||||
|
||||
void ARC_ConfigKey_Read_Uint16_t(ARC_Config* config, ARC_String *string, void **value){
|
||||
*value = (uint16_t *) malloc(sizeof(uint16_t));
|
||||
*((uint16_t *)(*value)) = (uint16_t) ARC_String_ToUint64_t(data, subdata);
|
||||
}
|
||||
|
||||
void ARC_ConfigKey_Read_Int16_t(ARC_Config* config, const char *data, ARC_StringSubstr *subdata, void **value){
|
||||
*value = (int16_t *) malloc(sizeof(int16_t));
|
||||
*((int16_t *)(*value)) = (int16_t) ARC_String_ToUint64_t(data, subdata);
|
||||
}
|
||||
|
||||
void ARC_ConfigKey_Read_Uint32_t(ARC_Config* config, const char *data, ARC_StringSubstr *subdata, void **value){
|
||||
*value = (uint32_t *) malloc(sizeof(uint32_t));
|
||||
*((uint32_t *)(*value)) = (uint32_t) ARC_String_ToUint64_t(data, subdata);
|
||||
}
|
||||
|
||||
void ARC_ConfigKey_Read_Int32_t(ARC_Config* config, const char *data, ARC_StringSubstr *subdata, void **value){
|
||||
*value = (int32_t *) malloc(sizeof(int32_t));
|
||||
*((int32_t *)(*value)) = (int32_t) ARC_String_ToUint64_t(data, subdata);
|
||||
}
|
||||
|
||||
void ARC_ConfigKey_Read_Int(ARC_Config* config, const char *data, ARC_StringSubstr *subdata, void **value){
|
||||
*value = (int *) malloc(sizeof(int));
|
||||
*((int *)(*value)) = (int) ARC_String_ToUint64_t(data, subdata);
|
||||
}
|
||||
|
||||
void ARC_ConfigKey_Read_Uint64_t(ARC_Config* config, const char *data, ARC_StringSubstr *subdata, void **value){
|
||||
*value = (uint64_t *) malloc(sizeof(uint64_t));
|
||||
*((uint64_t *)(*value)) = ARC_String_ToUint64_t(data, subdata);
|
||||
}
|
||||
|
||||
void ARC_ConfigKey_Read_Int64_t(ARC_Config* config, const char *data, ARC_StringSubstr *subdata, void **value){
|
||||
*value = (int64_t *) malloc(sizeof(int64_t));
|
||||
*((int64_t *)(*value)) = (int64_t) ARC_String_ToUint64_t(data, subdata);
|
||||
}
|
||||
|
||||
void ARC_ConfigKey_Read_Long(ARC_Config* config, const char *data, ARC_StringSubstr *subdata, void **value){
|
||||
*value = (long *) malloc(sizeof(long));
|
||||
*((long *)(*value)) = (long) ARC_String_ToUint64_t(data, subdata);
|
||||
}
|
||||
|
||||
void ARC_ConfigKey_Read_String(ARC_Config* config, const char *data, ARC_StringSubstr *subdata, void **value){
|
||||
ARC_StringSubstr_StripWhitespaceEnds((char *)data, subdata);
|
||||
if(data[subdata->index] != '"' || data[subdata->index + subdata->length - 1] != '"'){
|
||||
arc_errno = ARC_ERRNO_DATA;
|
||||
return;
|
||||
uint8_t ARC_ConfigKey_Read_Int8_t(ARC_Config* config, ARC_String *string, void **value){
|
||||
ARC_Config_Get(config, string, value);
|
||||
if(*value){
|
||||
return 1;
|
||||
}
|
||||
ARC_StringSubstr_StripEnds((char *)data, (char *)"\"", subdata);
|
||||
*value = (char *) malloc(sizeof(char) * (subdata->length + 1));
|
||||
strncpy((char *)(*value), data + subdata->index, subdata->length);
|
||||
((char *)(*value))[subdata->length] = '\0';
|
||||
|
||||
*value = (int8_t *) malloc(sizeof(int8_t));
|
||||
*((int8_t *)(*value)) = (int8_t) ARC_String_ToInt64_t(string);
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint8_t ARC_ConfigKey_Read_Uint16_t(ARC_Config* config, ARC_String *string, void **value){
|
||||
ARC_Config_Get(config, string, value);
|
||||
if(*value){
|
||||
return 1;
|
||||
}
|
||||
|
||||
*value = (uint16_t *) malloc(sizeof(uint16_t));
|
||||
*((uint16_t *)(*value)) = (uint16_t) ARC_String_ToUint64_t(string);
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint8_t ARC_ConfigKey_Read_Int16_t(ARC_Config* config, ARC_String *string, void **value){
|
||||
ARC_Config_Get(config, string, value);
|
||||
if(*value){
|
||||
return 1;
|
||||
}
|
||||
|
||||
*value = (int16_t *) malloc(sizeof(int16_t));
|
||||
*((int16_t *)(*value)) = (int16_t) ARC_String_ToInt64_t(string);
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint8_t ARC_ConfigKey_Read_Uint32_t(ARC_Config* config, ARC_String *string, void **value){
|
||||
ARC_Config_Get(config, string, value);
|
||||
if(*value){
|
||||
return 1;
|
||||
}
|
||||
|
||||
*value = (uint32_t *) malloc(sizeof(uint32_t));
|
||||
*((uint32_t *)(*value)) = (uint32_t) ARC_String_ToUint64_t(string);
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint8_t ARC_ConfigKey_Read_Int32_t(ARC_Config* config, ARC_String *string, void **value){
|
||||
ARC_Config_Get(config, string, value);
|
||||
if(*value){
|
||||
return 1;
|
||||
}
|
||||
|
||||
*value = (int32_t *) malloc(sizeof(int32_t));
|
||||
*((int32_t *)(*value)) = (int32_t) ARC_String_ToInt64_t(string);
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint8_t ARC_ConfigKey_Read_Uint64_t(ARC_Config* config, ARC_String *string, void **value){
|
||||
ARC_Config_Get(config, string, value);
|
||||
if(*value){
|
||||
return 1;
|
||||
}
|
||||
|
||||
*value = (uint64_t *) malloc(sizeof(uint64_t));
|
||||
*((uint64_t *)(*value)) = (uint64_t) ARC_String_ToUint64_t(string);
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint8_t ARC_ConfigKey_Read_Int64_t(ARC_Config* config, ARC_String *string, void **value){
|
||||
ARC_Config_Get(config, string, value);
|
||||
if(*value){
|
||||
return 1;
|
||||
}
|
||||
|
||||
*value = (int64_t *) malloc(sizeof(int64_t));
|
||||
*((int64_t *)(*value)) = (int64_t) ARC_String_ToInt64_t(string);
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint8_t ARC_ConfigKey_Read_Char_t(ARC_Config* config, ARC_String *string, void **value){
|
||||
ARC_Config_Get(config, string, value);
|
||||
if(*value){
|
||||
return 1;
|
||||
}
|
||||
|
||||
if(string->length != 1){
|
||||
arc_errno = ARC_ERRNO_DATA;
|
||||
return 0;
|
||||
}
|
||||
|
||||
*value = (char *) malloc(sizeof(char));
|
||||
*((char *)(*value)) = string->data[0];
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint8_t ARC_ConfigKey_Read_Int(ARC_Config* config, ARC_String *string, void **value){
|
||||
ARC_Config_Get(config, string, value);
|
||||
if(*value){
|
||||
return 1;
|
||||
}
|
||||
|
||||
*value = (int *) malloc(sizeof(int));
|
||||
*((int *)(*value)) = (int) ARC_String_ToInt64_t(string);
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint8_t ARC_ConfigKey_Read_Long(ARC_Config* config, ARC_String *string, void **value){
|
||||
ARC_Config_Get(config, string, value);
|
||||
if(*value){
|
||||
return 1;
|
||||
}
|
||||
|
||||
*value = (long *) malloc(sizeof(long));
|
||||
*((long *)(*value)) = (long) ARC_String_ToInt64_t(string);
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint8_t ARC_ConfigKey_Read_Float(ARC_Config* config, ARC_String *string, void **value){
|
||||
ARC_Config_Get(config, string, value);
|
||||
if(*value){
|
||||
return 1;
|
||||
}
|
||||
|
||||
*value = (float *) malloc(sizeof(float));
|
||||
*((float *)(*value)) = (float) ARC_String_ToDouble(string);
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint8_t ARC_ConfigKey_Read_Double(ARC_Config* config, ARC_String *string, void **value){
|
||||
ARC_Config_Get(config, string, value);
|
||||
if(*value){
|
||||
return 1;
|
||||
}
|
||||
|
||||
*value = (double *) malloc(sizeof(double));
|
||||
*((double *)(*value)) = (double) ARC_String_ToDouble(string);
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint8_t ARC_ConfigKey_Read_String(ARC_Config* config, ARC_String *string, void **value){
|
||||
ARC_Config_Get(config, string, value);
|
||||
if(*value){
|
||||
return 1;
|
||||
}
|
||||
|
||||
ARC_String_Copy((ARC_String **)value, string);
|
||||
return 0;
|
||||
}
|
||||
/*
|
||||
void ARC_ConfigKey_Read_StringArray(ARC_Config* config, const char *data, ARC_StringSubstr *subdata, void **value){
|
||||
ARC_StringSubstr_StripWhitespaceEnds((char *)data, subdata);
|
||||
if(data[subdata->index] != '{' || data[subdata->index + subdata->length - 1] != '}'){ return ARC_ERRNO_DATA; }
|
||||
|
|
@ -177,21 +257,60 @@ void ARC_ConfigKey_Read_StringArray(ARC_Config* config, const char *data, ARC_St
|
|||
}
|
||||
*/
|
||||
|
||||
void ARC_ConfigKey_Delete_Uint8_t(ARC_Config* config, void *value){
|
||||
void ARC_ConfigKey_Delete_Uint8_t(ARC_Config *config, ARC_String *string, void *value){
|
||||
free((uint8_t *)value);
|
||||
}
|
||||
|
||||
// void ARC_ConfigKey_Delete_Int8_t (ARC_Config* config, void *value){ if((int8_t *)value){ free((int8_t *)value); } }
|
||||
// void ARC_ConfigKey_Delete_Char (ARC_Config* config, void *value){ if((char *)value){ free((char *)value); } }
|
||||
// void ARC_ConfigKey_Delete_Uint16_t (ARC_Config* config, void *value){ if((uint16_t *)value){ free((uint16_t *)value); } }
|
||||
// void ARC_ConfigKey_Delete_Int16_t (ARC_Config* config, void *value){ if((int16_t *)value){ free((int16_t *)value); } }
|
||||
// void ARC_ConfigKey_Delete_Uint32_t (ARC_Config* config, void *value){ if((uint32_t *)value){ free((uint32_t *)value); } }
|
||||
// void ARC_ConfigKey_Delete_Int32_t (ARC_Config* config, void *value){ if((int32_t *)value){ free((int32_t *)value); } }
|
||||
// void ARC_ConfigKey_Delete_Int (ARC_Config* config, void *value){ if((int *)value){ free((int *)value); } }
|
||||
// void ARC_ConfigKey_Delete_Uint64_t (ARC_Config* config, void *value){ if((uint64_t *)value){ free((uint64_t *)value); } }
|
||||
// void ARC_ConfigKey_Delete_Int64_t (ARC_Config* config, void *value){ if((int64_t *)value){ free((int64_t *)value); } }
|
||||
// void ARC_ConfigKey_Delete_Long (ARC_Config* config, void *value){ if((long *)value){ free((long *)value); } }
|
||||
// void ARC_ConfigKey_Delete_String (ARC_Config* config, void *value){ if((char *)value){ free((char *)value); } }
|
||||
// void ARC_ConfigKey_Delete_StringArray(ARC_Config* config, void *value){ if((ARC_Array *)value){ free((ARC_Array *)value); } }
|
||||
void ARC_ConfigKey_Delete_Int8_t(ARC_Config *config, ARC_String *string, void *value){
|
||||
free((int8_t *)value);
|
||||
}
|
||||
|
||||
void ARC_ConfigKey_Delete_Uint16_t(ARC_Config *config, ARC_String *string, void *value){
|
||||
free((uint16_t *)value);
|
||||
}
|
||||
|
||||
void ARC_ConfigKey_Delete_Int16_t(ARC_Config *config, ARC_String *string, void *value){
|
||||
free((int16_t *)value);
|
||||
}
|
||||
|
||||
void ARC_ConfigKey_Delete_Uint32_t(ARC_Config *config, ARC_String *string, void *value){
|
||||
free((uint32_t *)value);
|
||||
}
|
||||
|
||||
void ARC_ConfigKey_Delete_Int32_t(ARC_Config *config, ARC_String *string, void *value){
|
||||
free((int32_t *)value);
|
||||
}
|
||||
|
||||
void ARC_ConfigKey_Delete_Uint64_t(ARC_Config *config, ARC_String *string, void *value){
|
||||
free((uint64_t *)value);
|
||||
}
|
||||
|
||||
void ARC_ConfigKey_Delete_Int64_t(ARC_Config *config, ARC_String *string, void *value){
|
||||
free((int64_t *)value);
|
||||
}
|
||||
|
||||
void ARC_ConfigKey_Delete_Char(ARC_Config *config, ARC_String *string, void *value){
|
||||
free((char *)value);
|
||||
}
|
||||
|
||||
void ARC_ConfigKey_Delete_Int(ARC_Config *config, ARC_String *string, void *value){
|
||||
free((int *)value);
|
||||
}
|
||||
|
||||
void ARC_ConfigKey_Delete_Long(ARC_Config *config, ARC_String *string, void *value){
|
||||
free((long *)value);
|
||||
}
|
||||
|
||||
void ARC_ConfigKey_Delete_Float(ARC_Config *config, ARC_String *string, void *value){
|
||||
free((float *)value);
|
||||
}
|
||||
|
||||
void ARC_ConfigKey_Delete_Double(ARC_Config *config, ARC_String *string, void *value){
|
||||
free((double *)value);
|
||||
}
|
||||
|
||||
void ARC_ConfigKey_Delete_String(ARC_Config *config, ARC_String *string, void *value){
|
||||
ARC_String_Destroy((ARC_String *)value);
|
||||
}
|
||||
|
||||
#endif //ARC_DEFAULT_CONFIG
|
||||
|
|
|
|||
|
|
@ -14,6 +14,15 @@ void ARC_String_Create(ARC_String **string, char *data, uint64_t length){
|
|||
(*string)->data[length] = '\0';
|
||||
}
|
||||
|
||||
void ARC_String_CreateWithStrlen(ARC_String **string, char *data){
|
||||
*string = (ARC_String *)malloc(sizeof(ARC_String));
|
||||
(*string)->length = strlen(data);
|
||||
(*string)->data = (char *)malloc((*string)->length + 1);
|
||||
|
||||
strncpy((*string)->data, data, (*string)->length);
|
||||
(*string)->data[(*string)->length] = '\0';
|
||||
}
|
||||
|
||||
void ARC_String_Destroy(ARC_String *string){
|
||||
free(string->data);
|
||||
free(string);
|
||||
|
|
@ -108,13 +117,18 @@ uint8_t ARC_String_Alpha(ARC_String *string){
|
|||
}
|
||||
|
||||
uint64_t ARC_String_ToUint64_t(ARC_String *string){
|
||||
char temp[string->length + 1];
|
||||
strncpy(temp, string->data, string->length);
|
||||
temp[string->length] = '\0';
|
||||
|
||||
return (uint64_t) strtoul(temp, NULL, 10);
|
||||
return (uint64_t) strtoul(string->data, NULL, 10);
|
||||
}
|
||||
|
||||
int64_t ARC_String_ToInt64_t(ARC_String *string){
|
||||
return (int64_t) strtol(string->data, NULL, 10);
|
||||
}
|
||||
|
||||
double ARC_String_ToDouble(ARC_String *string){
|
||||
return strtod(string->data, NULL);
|
||||
}
|
||||
|
||||
|
||||
uint64_t ARC_String_Find(ARC_String *string, ARC_String *substring){
|
||||
if(!string || !substring){
|
||||
arc_errno = ARC_ERRNO_NULL;
|
||||
|
|
@ -128,7 +142,7 @@ uint64_t ARC_String_Find(ARC_String *string, ARC_String *substring){
|
|||
uint64_t max = string->length - (substring->length - 1);
|
||||
for(uint64_t i = 0; max; i++, max--){
|
||||
if(!strncmp(string->data + i, substring->data, substring->length)){
|
||||
return i + 1;
|
||||
return i;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue