mirror of
https://github.com/zlgopen/awtk.git
synced 2025-05-08 19:44:45 +08:00
add function to load/save ini/json/xml/ubjson from/to buff
This commit is contained in:
parent
02d3847632
commit
88cb8f59f7
@ -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。
|
||||
|
@ -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);
|
||||
```
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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。
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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。
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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。
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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。
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user