213
vector<bool> IniParser::get_boolean_array(const std::string& group, const std::string& key) const
258
vector<double> IniParser::get_double_array(const std::string& group, const std::string& key) const
260
lock_guard<std::mutex> lock(internal::parser_mutex);
262
vector<double> result;
216
263
GError* e = nullptr;
219
bools = g_key_file_get_boolean_list(p->k, group.c_str(), key.c_str(), &count, &e);
220
inspect_error(e, "Could not get boolean array", p->filename, group);
266
doubles = g_key_file_get_double_list(p->k, group.c_str(), key.c_str(), &count, &e);
267
inspect_error(e, "Could not get double array", p->filename, group);
221
268
for (gsize i = 0; i < count; i++)
223
result.push_back(bools[i]);
270
result.push_back(doubles[i]);
229
276
string IniParser::get_start_group() const
278
lock_guard<std::mutex> lock(internal::parser_mutex);
231
280
gchar* sg = g_key_file_get_start_group(p->k);
232
281
string result(sg);
320
bool IniParser::remove_group(const std::string& group)
322
lock_guard<std::mutex> lock(internal::parser_mutex);
326
rval = g_key_file_remove_group(p->k, group.c_str(), &e);
327
inspect_error(e, "Error removing group", p->filename, group);
331
bool IniParser::remove_key(const std::string& group, const std::string& key)
333
lock_guard<std::mutex> lock(internal::parser_mutex);
337
rval = g_key_file_remove_key(p->k, group.c_str(), key.c_str(), &e);
338
inspect_error(e, "Error removing key", p->filename, group);
342
void IniParser::set_string(const std::string& group, const std::string& key, const std::string& value)
344
lock_guard<std::mutex> lock(internal::parser_mutex);
346
g_key_file_set_string(p->k, group.c_str(), key.c_str(), value.c_str());
350
void IniParser::set_locale_string(const std::string& group, const std::string& key,
351
const std::string& value, const std::string& locale)
353
lock_guard<std::mutex> lock(internal::parser_mutex);
355
g_key_file_set_locale_string(p->k, group.c_str(), key.c_str(), locale.c_str(), value.c_str());
359
void IniParser::set_boolean(const std::string& group, const std::string& key, bool value)
361
lock_guard<std::mutex> lock(internal::parser_mutex);
363
g_key_file_set_boolean(p->k, group.c_str(), key.c_str(), value);
367
void IniParser::set_int(const std::string& group, const std::string& key, int value)
369
lock_guard<std::mutex> lock(internal::parser_mutex);
371
g_key_file_set_integer(p->k, group.c_str(), key.c_str(), value);
375
void IniParser::set_double(const std::string& group, const std::string& key, double value)
377
lock_guard<std::mutex> lock(internal::parser_mutex);
379
g_key_file_set_double(p->k, group.c_str(), key.c_str(), value);
383
void IniParser::set_string_array(const std::string& group, const std::string& key,
384
const std::vector<std::string>& value)
386
lock_guard<std::mutex> lock(internal::parser_mutex);
388
int count = value.size();
389
gchar** strlist = g_new(gchar*, count+1);
391
for (int i = 0; i < count; ++i)
393
strlist[i] = g_strdup(value[i].c_str());
395
strlist[count] = nullptr;
397
g_key_file_set_string_list(p->k, group.c_str(), key.c_str(), strlist, count);
403
void IniParser::set_locale_string_array(const std::string& group, const std::string& key,
404
const std::vector<std::string>& value, const std::string& locale)
406
lock_guard<std::mutex> lock(internal::parser_mutex);
408
int count = value.size();
409
gchar** strlist = g_new(gchar*, count+1);
411
for (int i = 0; i < count; ++i)
413
strlist[i] = g_strdup(value[i].c_str());
415
strlist[count] = nullptr;
417
g_key_file_set_locale_string_list(p->k, group.c_str(), key.c_str(), locale.c_str(), strlist, count);
423
void IniParser::set_boolean_array(const std::string& group, const std::string& key, const std::vector<bool>& value)
425
lock_guard<std::mutex> lock(internal::parser_mutex);
427
int count = value.size();
428
gboolean* boollist = g_new(gboolean, count);
430
for (int i = 0; i < count; ++i)
432
boollist[i] = value[i];
435
g_key_file_set_boolean_list(p->k, group.c_str(), key.c_str(), boollist, count);
441
void IniParser::set_int_array(const std::string& group, const std::string& key, const std::vector<int>& value)
443
lock_guard<std::mutex> lock(internal::parser_mutex);
445
int count = value.size();
446
gint* intlist = g_new(gint, count);
448
for (int i = 0; i < count; ++i)
450
intlist[i] = value[i];
453
g_key_file_set_integer_list(p->k, group.c_str(), key.c_str(), intlist, count);
459
void IniParser::set_double_array(const std::string& group, const std::string& key, const std::vector<double>& value)
461
lock_guard<std::mutex> lock(internal::parser_mutex);
463
int count = value.size();
464
gdouble* doublelist = g_new(gdouble, count);
466
for (int i = 0; i < count; ++i)
468
doublelist[i] = value[i];
471
g_key_file_set_double_list(p->k, group.c_str(), key.c_str(), doublelist, count);
477
void IniParser::sync()
479
lock_guard<std::mutex> lock(internal::parser_mutex);
484
if (!g_key_file_save_to_file(p->k, p->filename.c_str(), &e))
486
string message = "Could not write ini file ";
487
message += p->filename;
489
message += e->message;
490
int errnum = e->code;
492
throw FileException(message, errnum);
268
499
} // namespace util