add function to load/save ini/json/xml/ubjson from/to buff

This commit is contained in:
lixianjing 2023-06-30 12:08:08 +08:00
parent 02d3847632
commit 88cb8f59f7
14 changed files with 282 additions and 1 deletions

View File

@ -1,5 +1,11 @@
# 最新动态
2023/06/30
* 增加函数conf\_ini\_load\_from\_buff/conf\_ini\_save\_to\_buff
* 增加函数conf\_json\_load\_from\_buff/conf\_json\_save\_to\_buff
* 增加函数conf\_xml\_load\_from\_buff/conf\_xml\_save\_to\_buff
* 增加函数conf\_ubjson\_load\_from\_buff/conf\_ubjson\_save\_to\_buff
2023/06/29
* 更新API文档。
* 增加函数combo\_box\_remove\_option\_by\_index。

View File

@ -317,6 +317,8 @@ ret_t conf_ubjson_save_as(tk_object_t* obj, const char* url);
## 完整示例
* 文件读写
```c
#include "conf_io/conf_json.h"
@ -342,4 +344,23 @@ void demo_conf_json(c) {
"name" : "awtk",
"age" : 100
}
```
```
* 内存数据读写
```c
wbuffer_t wb;
tk_object_t* conf = conf_xml_create();
ASSERT_NE(conf, (tk_object_t*)NULL);
ASSERT_EQ(tk_object_set_prop_int(conf, "awtk.value", 123), RET_OK);
ASSERT_EQ(tk_object_get_prop_int(conf, "awtk.value", 0), 123);
ASSERT_EQ(conf_xml_save_to_buff(conf, &wb), RET_OK);
TK_OBJECT_UNREF(conf);
conf = conf_xml_load_from_buff(wb.data, wb.cursor, FALSE);
ASSERT_EQ(tk_object_get_prop_int(conf, "awtk.value", 0), 123);
TK_OBJECT_UNREF(conf);
wbuffer_deinit(&wb);
```

View File

@ -22,6 +22,9 @@
#include "tkc/mem.h"
#include "tkc/utils.h"
#include "conf_io/conf_ini.h"
#include "tkc/data_reader_mem.h"
#include "tkc/data_writer_wbuffer.h"
#include "tkc/data_reader_factory.h"
#include "tkc/data_writer_factory.h"
typedef enum _parser_state_t {
@ -329,3 +332,21 @@ ret_t conf_ini_save_as(tk_object_t* obj, const char* url) {
tk_object_t* conf_ini_create(void) {
return conf_ini_load(NULL, TRUE);
}
tk_object_t* conf_ini_load_from_buff(const void* buff, uint32_t size, bool_t create_if_not_exist) {
char url[MAX_PATH+1] = {0};
return_value_if_fail(buff != NULL, NULL);
data_reader_mem_build_url(buff, size, url);
return conf_ini_load(url, create_if_not_exist);
}
ret_t conf_ini_save_to_buff(tk_object_t* obj, wbuffer_t* wb) {
char url[MAX_PATH + 1] = {0};
return_value_if_fail(obj != NULL && wb != NULL, RET_BAD_PARAMS);
wbuffer_init_extendable(wb);
data_writer_wbuffer_build_url(wb, url);
return conf_ini_save_as(obj, url);
}

View File

@ -23,6 +23,7 @@
#define TK_CONF_INI_H
#include "tkc/str.h"
#include "tkc/buffer.h"
#include "conf_io/conf_obj.h"
BEGIN_C_DECLS
@ -57,6 +58,31 @@ tk_object_t* conf_ini_create(void);
*/
tk_object_t* conf_ini_load(const char* url, bool_t create_if_not_exist);
/**
* @method conf_ini_load_from_buff
* INI对象
* @annotation ["constructor"]
*
* @param {const void*} buff
* @param {uint32_t} size
* @param {bool_t} create_if_not_exist
*
* @return {tk_object_t*}
*/
tk_object_t* conf_ini_load_from_buff(const void* buff, uint32_t size, bool_t create_if_not_exist);
/**
* @method conf_ini_save_to_buff
* obj保存为INI格式到内存
*
* @param {tk_object_t*} obj doc对象
* @param {wbuffer_t*} wb (使wbuffer_deinit)
*
* @return {ret_t} RET_OK表示成功
*/
ret_t conf_ini_save_to_buff(tk_object_t* obj, wbuffer_t* wb);
/**
* @method conf_ini_save_as
* doc对象保存到指定URL

View File

@ -22,6 +22,8 @@
#include "tkc/mem.h"
#include "tkc/utils.h"
#include "conf_io/conf_json.h"
#include "tkc/data_reader_mem.h"
#include "tkc/data_writer_wbuffer.h"
#include "tkc/data_reader_factory.h"
#include "tkc/data_writer_factory.h"
@ -503,3 +505,21 @@ ret_t conf_json_save_as(tk_object_t* obj, const char* url) {
tk_object_t* conf_json_create(void) {
return conf_json_load(NULL, TRUE);
}
tk_object_t* conf_json_load_from_buff(const void* buff, uint32_t size, bool_t create_if_not_exist) {
char url[MAX_PATH+1] = {0};
return_value_if_fail(buff != NULL, NULL);
data_reader_mem_build_url(buff, size, url);
return conf_json_load(url, create_if_not_exist);
}
ret_t conf_json_save_to_buff(tk_object_t* obj, wbuffer_t* wb) {
char url[MAX_PATH + 1] = {0};
return_value_if_fail(obj != NULL && wb != NULL, RET_BAD_PARAMS);
wbuffer_init_extendable(wb);
data_writer_wbuffer_build_url(wb, url);
return conf_json_save_as(obj, url);
}

View File

@ -23,6 +23,7 @@
#define TK_CONF_JSON_H
#include "tkc/str.h"
#include "tkc/buffer.h"
#include "conf_io/conf_obj.h"
BEGIN_C_DECLS
@ -56,6 +57,30 @@ tk_object_t* conf_json_create(void);
*/
tk_object_t* conf_json_load(const char* url, bool_t create_if_not_exist);
/**
* @method conf_json_load_from_buff
* JSON对象
* @annotation ["constructor"]
*
* @param {const void*} buff
* @param {uint32_t} size
* @param {bool_t} create_if_not_exist
*
* @return {tk_object_t*}
*/
tk_object_t* conf_json_load_from_buff(const void* buff, uint32_t size, bool_t create_if_not_exist);
/**
* @method conf_json_save_to_buff
* obj保存为JSON格式到内存
*
* @param {tk_object_t*} obj doc对象
* @param {wbuffer_t*} wb (使wbuffer_deinit)
*
* @return {ret_t} RET_OK表示成功
*/
ret_t conf_json_save_to_buff(tk_object_t* obj, wbuffer_t* wb);
/**
* @method conf_json_save_as
* doc对象保存到指定URL

View File

@ -24,6 +24,8 @@
#include "tkc/buffer.h"
#include "ubjson/ubjson_parser.h"
#include "conf_io/conf_ubjson.h"
#include "tkc/data_reader_mem.h"
#include "tkc/data_writer_wbuffer.h"
#include "tkc/data_reader_factory.h"
#include "tkc/data_writer_factory.h"
@ -256,3 +258,21 @@ ret_t conf_ubjson_save_as(tk_object_t* obj, const char* url) {
tk_object_t* conf_ubjson_create(void) {
return conf_ubjson_load(NULL, TRUE);
}
tk_object_t* conf_ubjson_load_from_buff(const void* buff, uint32_t size, bool_t create_if_not_exist) {
char url[MAX_PATH+1] = {0};
return_value_if_fail(buff != NULL, NULL);
data_reader_mem_build_url(buff, size, url);
return conf_ubjson_load(url, create_if_not_exist);
}
ret_t conf_ubjson_save_to_buff(tk_object_t* obj, wbuffer_t* wb) {
char url[MAX_PATH + 1] = {0};
return_value_if_fail(obj != NULL && wb != NULL, RET_BAD_PARAMS);
wbuffer_init_extendable(wb);
data_writer_wbuffer_build_url(wb, url);
return conf_ubjson_save_as(obj, url);
}

View File

@ -22,6 +22,7 @@
#ifndef TK_CONF_UBJSON_H
#define TK_CONF_UBJSON_H
#include "tkc/buffer.h"
#include "conf_io/conf_obj.h"
#include "ubjson/ubjson_writer.h"
#include "ubjson/ubjson_reader.h"
@ -58,6 +59,30 @@ tk_object_t* conf_ubjson_create(void);
*/
tk_object_t* conf_ubjson_load(const char* url, bool_t create_if_not_exist);
/**
* @method conf_ubjson_load_from_buff
* UBJSON对象
* @annotation ["constructor"]
*
* @param {const void*} buff
* @param {uint32_t} size
* @param {bool_t} create_if_not_exist
*
* @return {tk_object_t*}
*/
tk_object_t* conf_ubjson_load_from_buff(const void* buff, uint32_t size, bool_t create_if_not_exist);
/**
* @method conf_ubjson_save_to_buff
* obj保存为UBJSON格式到内存
*
* @param {tk_object_t*} obj doc对象
* @param {wbuffer_t*} wb (使wbuffer_deinit)
*
* @return {ret_t} RET_OK表示成功
*/
ret_t conf_ubjson_save_to_buff(tk_object_t* obj, wbuffer_t* wb);
/**
* @method conf_ubjson_save_as
* doc对象保存到指定URL

View File

@ -23,6 +23,9 @@
#include "tkc/utils.h"
#include "xml/xml_parser.h"
#include "conf_io/conf_xml.h"
#include "tkc/data_reader_mem.h"
#include "tkc/data_writer_wbuffer.h"
#include "tkc/data_reader_factory.h"
#include "tkc/data_writer_factory.h"
typedef struct _xml_builter_t {
@ -306,3 +309,21 @@ ret_t conf_xml_save_as(tk_object_t* obj, const char* url) {
tk_object_t* conf_xml_create(void) {
return conf_xml_load(NULL, TRUE);
}
tk_object_t* conf_xml_load_from_buff(const void* buff, uint32_t size, bool_t create_if_not_exist) {
char url[MAX_PATH+1] = {0};
return_value_if_fail(buff != NULL, NULL);
data_reader_mem_build_url(buff, size, url);
return conf_xml_load(url, create_if_not_exist);
}
ret_t conf_xml_save_to_buff(tk_object_t* obj, wbuffer_t* wb) {
char url[MAX_PATH + 1] = {0};
return_value_if_fail(obj != NULL && wb != NULL, RET_BAD_PARAMS);
wbuffer_init_extendable(wb);
data_writer_wbuffer_build_url(wb, url);
return conf_xml_save_as(obj, url);
}

View File

@ -23,6 +23,7 @@
#define TK_CONF_XML_H
#include "tkc/str.h"
#include "tkc/buffer.h"
#include "conf_io/conf_obj.h"
BEGIN_C_DECLS
@ -57,6 +58,30 @@ tk_object_t* conf_xml_create(void);
*/
tk_object_t* conf_xml_load(const char* url, bool_t create_if_not_exist);
/**
* @method conf_xml_load_from_buff
* XML对象
* @annotation ["constructor"]
*
* @param {const void*} buff
* @param {uint32_t} size
* @param {bool_t} create_if_not_exist
*
* @return {tk_object_t*}
*/
tk_object_t* conf_xml_load_from_buff(const void* buff, uint32_t size, bool_t create_if_not_exist);
/**
* @method conf_xml_save_to_buff
* obj保存为XML格式到内存
*
* @param {tk_object_t*} obj doc对象
* @param {wbuffer_t*} wb (使wbuffer_deinit)
*
* @return {ret_t} RET_OK表示成功
*/
ret_t conf_xml_save_to_buff(tk_object_t* obj, wbuffer_t* wb);
/**
* @method conf_xml_save_as
* doc对象保存到指定URL

View File

@ -423,3 +423,21 @@ TEST(Ini, save_as) {
wbuffer_deinit(&wb);
TK_OBJECT_UNREF(conf);
}
TEST(Ini, buff) {
wbuffer_t wb;
tk_object_t* conf = conf_ini_create();
ASSERT_NE(conf, (tk_object_t*)NULL);
ASSERT_EQ(tk_object_set_prop_int(conf, "awtk.value", 123), RET_OK);
ASSERT_EQ(tk_object_get_prop_int(conf, "awtk.value", 0), 123);
ASSERT_EQ(conf_ini_save_to_buff(conf, &wb), RET_OK);
TK_OBJECT_UNREF(conf);
conf = conf_ini_load_from_buff(wb.data, wb.cursor, FALSE);
ASSERT_EQ(tk_object_get_prop_int(conf, "awtk.value", 0), 123);
TK_OBJECT_UNREF(conf);
wbuffer_deinit(&wb);
}

View File

@ -631,3 +631,21 @@ TEST(Json, subobject2) {
TK_OBJECT_UNREF(awtk);
TK_OBJECT_UNREF(conf);
}
TEST(Json, buff) {
wbuffer_t wb;
tk_object_t* conf = conf_json_create();
ASSERT_NE(conf, (tk_object_t*)NULL);
ASSERT_EQ(tk_object_set_prop_int(conf, "awtk.value", 123), RET_OK);
ASSERT_EQ(tk_object_get_prop_int(conf, "awtk.value", 0), 123);
ASSERT_EQ(conf_json_save_to_buff(conf, &wb), RET_OK);
TK_OBJECT_UNREF(conf);
conf = conf_json_load_from_buff(wb.data, wb.cursor, FALSE);
ASSERT_EQ(tk_object_get_prop_int(conf, "awtk.value", 0), 123);
TK_OBJECT_UNREF(conf);
wbuffer_deinit(&wb);
}

View File

@ -182,3 +182,20 @@ TEST(Ubjson, save_as) {
wbuffer_deinit(&wb);
TK_OBJECT_UNREF(conf);
}
TEST(Ubjson, buff) {
wbuffer_t wb;
tk_object_t* conf = conf_ubjson_create();
ASSERT_NE(conf, (tk_object_t*)NULL);
ASSERT_EQ(tk_object_set_prop_int(conf, "awtk.value", 123), RET_OK);
ASSERT_EQ(tk_object_get_prop_int(conf, "awtk.value", 0), 123);
ASSERT_EQ(conf_ubjson_save_to_buff(conf, &wb), RET_OK);
TK_OBJECT_UNREF(conf);
conf = conf_ubjson_load_from_buff(wb.data, wb.cursor, FALSE);
ASSERT_EQ(tk_object_get_prop_int(conf, "awtk.value", 0), 123);
TK_OBJECT_UNREF(conf);
wbuffer_deinit(&wb);
}

View File

@ -192,3 +192,21 @@ TEST(Xml, text1) {
str_reset(&str);
conf_doc_destroy(doc);
}
TEST(Xml, buff) {
wbuffer_t wb;
tk_object_t* conf = conf_xml_create();
ASSERT_NE(conf, (tk_object_t*)NULL);
ASSERT_EQ(tk_object_set_prop_int(conf, "awtk.value", 123), RET_OK);
ASSERT_EQ(tk_object_get_prop_int(conf, "awtk.value", 0), 123);
ASSERT_EQ(conf_xml_save_to_buff(conf, &wb), RET_OK);
TK_OBJECT_UNREF(conf);
conf = conf_xml_load_from_buff(wb.data, wb.cursor, FALSE);
ASSERT_EQ(tk_object_get_prop_int(conf, "awtk.value", 0), 123);
TK_OBJECT_UNREF(conf);
wbuffer_deinit(&wb);
}