Prepare Build and Testing executable binary / Prepare-Build-Testing-With-Make (push) Successful in 9s
Prepare Build and Testing executable binary / Prepare-Build-Testing-With-CMake (push) Successful in 13s
Prepare Build and Testing executable binary / Prepare-Build-Testing-With-Meson (push) Successful in 13s
173 lines
5.2 KiB
C
173 lines
5.2 KiB
C
#include "ConfigManager.h"
|
|
#include <cJSON.h>
|
|
#include <pthread.h>
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include "file.h"
|
|
|
|
typedef struct ConfigManager {
|
|
cJSON *config;
|
|
pthread_mutex_t config_file_mutex;
|
|
char *config_file_name;
|
|
} ConfigManager;
|
|
|
|
ConfigManager *cm_new_config() {
|
|
ConfigManager *newcm = malloc(sizeof(ConfigManager));
|
|
newcm->config_file_name = nullptr;
|
|
newcm->config = nullptr;
|
|
return newcm;
|
|
}
|
|
|
|
ConfigManager *cm_new_config_from_file(const char *filename) {
|
|
ConfigManager *newcm = malloc(sizeof(ConfigManager));
|
|
newcm->config_file_name = strdup(filename);
|
|
pthread_mutex_lock(&(newcm->config_file_mutex));
|
|
char *config_file_content = read_file(newcm->config_file_name);
|
|
newcm->config = cJSON_Parse(config_file_content);
|
|
pthread_mutex_unlock(&(newcm->config_file_mutex));
|
|
return newcm;
|
|
}
|
|
|
|
ConfigManager *cm_new_config_from_object(cJSON *config) {
|
|
ConfigManager *newcm = malloc(sizeof(ConfigManager));
|
|
newcm->config = config;
|
|
newcm->config_file_name = nullptr;
|
|
return newcm;
|
|
}
|
|
|
|
void cm_set_config_from_file(ConfigManager *cm, const char *filename) {
|
|
cm->config_file_name = strdup(filename);
|
|
pthread_mutex_lock(&(cm->config_file_mutex));
|
|
char *config_file_content = read_file(cm->config_file_name);
|
|
cm->config = cJSON_Parse(config_file_content);
|
|
pthread_mutex_unlock(&(cm->config_file_mutex));
|
|
}
|
|
|
|
void cm_set_config_from_object(ConfigManager *cm, cJSON *config) {
|
|
cm->config = config;
|
|
}
|
|
|
|
void cm_delete_config(ConfigManager *cm) {
|
|
if (!cm) {
|
|
return;
|
|
}
|
|
if (cm->config) {
|
|
cJSON_Delete(cm->config);
|
|
}
|
|
if (cm->config_file_name) {
|
|
free(cm->config_file_name);
|
|
}
|
|
free(cm);
|
|
}
|
|
|
|
void cm_print_config(const ConfigManager *cm) {
|
|
printf("Config: %s\n", cJSON_Print(cm->config));
|
|
}
|
|
|
|
char *cm_get_config_filename(ConfigManager *cm) {
|
|
return strdup(cm->config_file_name);
|
|
}
|
|
|
|
cJSON *cm_get_config(ConfigManager *cm) {
|
|
return cJSON_Duplicate(cm->config, (cJSON_bool) true);
|
|
}
|
|
|
|
char *cm_get_parameter_as_string(ConfigManager *cm, const char *param_name) {
|
|
cJSON *param = cJSON_GetObjectItem(cm->config, param_name);
|
|
if (!param) return nullptr;
|
|
char *param_value = strdup(param->valuestring);
|
|
return param_value;
|
|
}
|
|
|
|
int cm_get_parameter_as_int(ConfigManager *cm, const char *param_name) {
|
|
cJSON *param = cJSON_GetObjectItem(cm->config, param_name);
|
|
return param->valueint;
|
|
}
|
|
double cm_get_parameter_as_double(ConfigManager *cm, const char *param_name) {
|
|
cJSON *param = cJSON_GetObjectItem(cm->config, param_name);
|
|
return param->valuedouble;
|
|
}
|
|
float cm_get_parameter_as_float(ConfigManager *cm, const char *param_name) {
|
|
cJSON *param = cJSON_GetObjectItem(cm->config, param_name);
|
|
return param->valuedouble;
|
|
}
|
|
bool cm_get_parameter_as_bool(ConfigManager *cm, const char *param_name) {
|
|
cJSON *param = cJSON_GetObjectItem(cm->config, param_name);
|
|
if (!param) return false;
|
|
return param->valueint;
|
|
}
|
|
|
|
void cm_set_string_parameter(ConfigManager *cm, const char *name,
|
|
const char *value) {
|
|
cJSON *param = cJSON_GetObjectItem(cm->config, name);
|
|
if (!param) {
|
|
cJSON_AddStringToObject(cm->config, name, value);
|
|
return;
|
|
}
|
|
cJSON_SetValuestring(param, value);
|
|
}
|
|
void cm_set_int_parameter(ConfigManager *cm, const char *name,
|
|
const int value) {
|
|
cJSON *param = cJSON_GetObjectItem(cm->config, name);
|
|
if (!param) {
|
|
cJSON_AddNumberToObject(cm->config, name, value);
|
|
return;
|
|
}
|
|
cJSON_SetIntValue(param, value);
|
|
}
|
|
void cm_set_double_parameter(ConfigManager *cm, const char *name,
|
|
const double value) {
|
|
cJSON *param = cJSON_GetObjectItem(cm->config, name);
|
|
if (!param) {
|
|
cJSON_AddNumberToObject(cm->config, name, value);
|
|
return;
|
|
}
|
|
cJSON_SetNumberValue(param, value);
|
|
}
|
|
void cm_set_float_parameter(ConfigManager *cm, const char *name,
|
|
const float value) {
|
|
cJSON *param = cJSON_GetObjectItem(cm->config, name);
|
|
if (!param) {
|
|
cJSON_AddNumberToObject(cm->config, name, value);
|
|
return;
|
|
}
|
|
cJSON_SetNumberValue(param, value);
|
|
}
|
|
void cm_set_bool_parameter(ConfigManager *cm, const char *name,
|
|
const bool value) {
|
|
cJSON *param = cJSON_GetObjectItem(cm->config, name);
|
|
if (!param) {
|
|
cJSON_AddBoolToObject(cm->config, name, value);
|
|
return;
|
|
}
|
|
cJSON_SetBoolValue(param, value);
|
|
}
|
|
void cm_set_null_parameter(ConfigManager *cm, const char *name) {
|
|
cJSON *param = cJSON_GetObjectItem(cm->config, name);
|
|
if (!param) {
|
|
cJSON_AddNullToObject(cm->config, name);
|
|
return;
|
|
}
|
|
cJSON_ReplaceItemInObject(cm->config, name, cJSON_CreateNull());
|
|
}
|
|
|
|
void cm_save_config(ConfigManager *cm) {
|
|
pthread_mutex_lock(&(cm->config_file_mutex));
|
|
FILE *configfile = fopen(cm->config_file_name, "w+");
|
|
char *configvalue = cJSON_Print(cm->config);
|
|
fprintf(configfile, "%s", configvalue);
|
|
fclose(configfile);
|
|
free(configvalue);
|
|
pthread_mutex_unlock(&(cm->config_file_mutex));
|
|
}
|
|
void cm_save_config_to_file(ConfigManager *cm, const char *filename) {
|
|
pthread_mutex_lock(&(cm->config_file_mutex));
|
|
FILE *configfile = fopen(filename, "w+");
|
|
char *configvalue = cJSON_Print(cm->config);
|
|
fprintf(configfile, "%s", configvalue);
|
|
fclose(configfile);
|
|
free(configvalue);
|
|
pthread_mutex_unlock(&(cm->config_file_mutex));
|
|
}
|