mirror of
https://github.com/zlgopen/awtk.git
synced 2025-05-08 19:44:45 +08:00
add data_reader_factory/data_writer_factory
This commit is contained in:
parent
b1797f1aed
commit
7aa326d2ce
@ -1,5 +1,10 @@
|
||||
# 最新动态
|
||||
|
||||
* 2020/03/01
|
||||
* 增加data writer file
|
||||
* 增加data reader factory
|
||||
* 增加data writer factory
|
||||
|
||||
* 2020/02/29
|
||||
* 完善 dialog 的layout 处理(感谢朝泽提供补丁)。
|
||||
* 完善 fs stat 处理(感谢陈谭提供补丁)。
|
||||
|
@ -81,7 +81,7 @@ ret_t children_layouter_factory_register(children_layouter_factory_t* factory, c
|
||||
* @param {children_layouter_factory_t*} factory 子控件布局算法工厂对象。
|
||||
* @param {const char*} type 类型。
|
||||
*
|
||||
* @return {children_layouter_t*} 返回窗口动画对象。
|
||||
* @return {children_layouter_t*} 返回子控件布局算法对象。
|
||||
*/
|
||||
children_layouter_t* children_layouter_factory_create_layouter(children_layouter_factory_t* factory,
|
||||
const char* type);
|
||||
|
@ -81,7 +81,7 @@ ret_t self_layouter_factory_register(self_layouter_factory_t* factory, const cha
|
||||
* @param {self_layouter_factory_t*} factory 控件自身布局算法工厂对象。
|
||||
* @param {const char*} type 类型。
|
||||
*
|
||||
* @return {self_layouter_t*} 返回窗口动画对象。
|
||||
* @return {self_layouter_t*} 返回控件自身布局算法对象。
|
||||
*/
|
||||
self_layouter_t* self_layouter_factory_create_layouter(self_layouter_factory_t* factory,
|
||||
const char* type);
|
||||
|
127
src/tkc/data_reader_factory.c
Normal file
127
src/tkc/data_reader_factory.c
Normal file
@ -0,0 +1,127 @@
|
||||
/**
|
||||
* File: data_reader_factory.c
|
||||
* Author: AWTK Develop Team
|
||||
* Brief: data reader factory
|
||||
*
|
||||
* Copyright (c) 2020 - 2020 Guangzhou ZHIYUAN Electronics Co.,Ltd.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* License file for more details.
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* History:
|
||||
* ================================================================
|
||||
* 2020-03-01 Li XianJing <xianjimli@hotmail.com> created
|
||||
*
|
||||
*/
|
||||
|
||||
#include "tkc/mem.h"
|
||||
#include "tkc/utils.h"
|
||||
#include "tkc/data_reader_factory.h"
|
||||
|
||||
static data_reader_factory_t* data_reader_factory_init(data_reader_factory_t* factory);
|
||||
static ret_t data_reader_factory_deinit(data_reader_factory_t* factory);
|
||||
|
||||
static data_reader_factory_t* s_data_reader_factory = NULL;
|
||||
|
||||
typedef struct _creator_item_t {
|
||||
char protocol[TK_NAME_LEN + 1];
|
||||
data_reader_create_t create;
|
||||
} creator_item_t;
|
||||
|
||||
static int32_t creator_item_cmp(const creator_item_t* iter, const char* protocol) {
|
||||
return strcmp(iter->protocol, protocol);
|
||||
}
|
||||
|
||||
data_reader_factory_t* data_reader_factory(void) {
|
||||
return s_data_reader_factory;
|
||||
}
|
||||
|
||||
data_reader_factory_t* data_reader_factory_create(void) {
|
||||
data_reader_factory_t* factory = TKMEM_ZALLOC(data_reader_factory_t);
|
||||
return_value_if_fail(factory != NULL, NULL);
|
||||
|
||||
return data_reader_factory_init(factory);
|
||||
}
|
||||
|
||||
static data_reader_factory_t* data_reader_factory_init(data_reader_factory_t* factory) {
|
||||
return_value_if_fail(factory != NULL, NULL);
|
||||
|
||||
darray_init(&(factory->creators), 0, default_destroy, (tk_compare_t)creator_item_cmp);
|
||||
|
||||
return factory;
|
||||
}
|
||||
|
||||
ret_t data_reader_factory_register(data_reader_factory_t* factory, const char* protocol,
|
||||
data_reader_create_t create) {
|
||||
creator_item_t* item = NULL;
|
||||
return_value_if_fail(factory != NULL && protocol != NULL && create != NULL, RET_BAD_PARAMS);
|
||||
|
||||
item = TKMEM_ZALLOC(creator_item_t);
|
||||
return_value_if_fail(item != NULL, RET_OOM);
|
||||
|
||||
item->create = create;
|
||||
tk_strncpy(item->protocol, protocol, TK_NAME_LEN);
|
||||
darray_push(&(factory->creators), item);
|
||||
|
||||
return RET_OK;
|
||||
}
|
||||
|
||||
data_reader_t* data_reader_factory_create_reader(data_reader_factory_t* factory, const char* url) {
|
||||
char protocol[TK_NAME_LEN + 1];
|
||||
const char* p = NULL;
|
||||
const creator_item_t* iter = NULL;
|
||||
return_value_if_fail(factory != NULL && url != NULL, NULL);
|
||||
|
||||
p = strchr(url, ':');
|
||||
memset(protocol, 0x00, sizeof(protocol));
|
||||
|
||||
if (p != NULL) {
|
||||
return_value_if_fail((p - url) < TK_NAME_LEN, NULL);
|
||||
strncpy(protocol, url, p - url);
|
||||
} else {
|
||||
strncpy(protocol, "file", 4);
|
||||
}
|
||||
|
||||
iter = darray_find(&(factory->creators), (void*)protocol);
|
||||
if (iter != NULL) {
|
||||
p = strstr(url, "://");
|
||||
|
||||
if (p == NULL) {
|
||||
p = url;
|
||||
} else {
|
||||
p += 3;
|
||||
}
|
||||
|
||||
return iter->create(p);
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
ret_t data_reader_factory_set(data_reader_factory_t* factory) {
|
||||
s_data_reader_factory = factory;
|
||||
|
||||
return RET_OK;
|
||||
}
|
||||
|
||||
static ret_t data_reader_factory_deinit(data_reader_factory_t* factory) {
|
||||
return_value_if_fail(factory != NULL, RET_BAD_PARAMS);
|
||||
|
||||
darray_deinit(&(factory->creators));
|
||||
|
||||
return RET_OK;
|
||||
}
|
||||
|
||||
ret_t data_reader_factory_destroy(data_reader_factory_t* factory) {
|
||||
return_value_if_fail(factory != NULL, RET_BAD_PARAMS);
|
||||
|
||||
data_reader_factory_deinit(factory);
|
||||
TKMEM_FREE(factory);
|
||||
|
||||
return RET_OK;
|
||||
}
|
101
src/tkc/data_reader_factory.h
Normal file
101
src/tkc/data_reader_factory.h
Normal file
@ -0,0 +1,101 @@
|
||||
/**
|
||||
* File: data_reader_factory.h
|
||||
* Author: AWTK Develop Team
|
||||
* Brief: data reader factory
|
||||
*
|
||||
* Copyright (c) 2020 - 2020 Guangzhou ZHIYUAN Electronics Co.,Ltd.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* License file for more details.
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* History:
|
||||
* ================================================================
|
||||
* 2020-03-01 Li XianJing <xianjimli@hotmail.com> created
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef TK_DATA_READER_FACTORY_H
|
||||
#define TK_DATA_READER_FACTORY_H
|
||||
|
||||
#include "tkc/darray.h"
|
||||
#include "tkc/data_reader.h"
|
||||
|
||||
BEGIN_C_DECLS
|
||||
|
||||
typedef data_reader_t* (*data_reader_create_t)(const char* args);
|
||||
|
||||
/**
|
||||
* @class data_reader_factory_t
|
||||
* data reader工厂。
|
||||
*
|
||||
*/
|
||||
typedef struct _data_reader_factory_t {
|
||||
/*private*/
|
||||
darray_t creators;
|
||||
} data_reader_factory_t;
|
||||
|
||||
/**
|
||||
* @method data_reader_factory
|
||||
* 获取缺省的data reader工厂对象。
|
||||
* @annotation ["constructor"]
|
||||
* @return {data_reader_factory_t*} 返回data reader工厂对象。
|
||||
*/
|
||||
data_reader_factory_t* data_reader_factory(void);
|
||||
|
||||
/**
|
||||
* @method data_reader_factory_set
|
||||
* 设置缺省的data reader工厂对象。
|
||||
* @param {data_reader_factory_t*} factory data reader工厂对象。
|
||||
*
|
||||
* @return {ret_t} 返回RET_OK表示成功,否则表示失败。
|
||||
*/
|
||||
ret_t data_reader_factory_set(data_reader_factory_t* factory);
|
||||
|
||||
/**
|
||||
* @method data_reader_factory_create
|
||||
* 创建data reader工厂对象。
|
||||
* @annotation ["constructor"]
|
||||
*
|
||||
* @return {data_reader_factory_t*} 返回data reader工厂对象。
|
||||
*/
|
||||
data_reader_factory_t* data_reader_factory_create(void);
|
||||
|
||||
/**
|
||||
* @method data_reader_factory_register
|
||||
* 注册data reader创建函数。
|
||||
* @param {data_reader_factory_t*} factory highlighter工厂对象。
|
||||
* @param {const char*} protocol 协议(如file)。
|
||||
* @param {data_reader_create_t} create data reader创建函数。
|
||||
*
|
||||
* @return {ret_t} 返回RET_OK表示成功,否则表示失败。
|
||||
*/
|
||||
ret_t data_reader_factory_register(data_reader_factory_t* factory, const char* protocol,
|
||||
data_reader_create_t create);
|
||||
/**
|
||||
* @method data_reader_factory_create_reader
|
||||
* 创建指定类型的data reader对象。
|
||||
* @annotation ["constructor"]
|
||||
* @param {data_reader_factory_t*} factory data reader工厂对象。
|
||||
* @param {const char*} url URL。
|
||||
*
|
||||
* @return {data_reader_t*} 返回data reader对象。
|
||||
*/
|
||||
data_reader_t* data_reader_factory_create_reader(data_reader_factory_t* factory, const char* url);
|
||||
|
||||
/**
|
||||
* @method data_reader_factory_destroy
|
||||
* 析构并释放data reader工厂对象。
|
||||
* @param {data_reader_factory_t*} factory data reader工厂对象。
|
||||
*
|
||||
* @return {ret_t} 返回RET_OK表示成功,否则表示失败。
|
||||
*/
|
||||
ret_t data_reader_factory_destroy(data_reader_factory_t* factory);
|
||||
|
||||
END_C_DECLS
|
||||
|
||||
#endif /*TK_DATA_READER_FACTORY_H*/
|
127
src/tkc/data_writer_factory.c
Normal file
127
src/tkc/data_writer_factory.c
Normal file
@ -0,0 +1,127 @@
|
||||
/**
|
||||
* File: data_writer_factory.c
|
||||
* Author: AWTK Develop Team
|
||||
* Brief: data writer factory
|
||||
*
|
||||
* Copyright (c) 2020 - 2020 Guangzhou ZHIYUAN Electronics Co.,Ltd.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* License file for more details.
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* History:
|
||||
* ================================================================
|
||||
* 2020-03-01 Li XianJing <xianjimli@hotmail.com> created
|
||||
*
|
||||
*/
|
||||
|
||||
#include "tkc/mem.h"
|
||||
#include "tkc/utils.h"
|
||||
#include "tkc/data_writer_factory.h"
|
||||
|
||||
static data_writer_factory_t* data_writer_factory_init(data_writer_factory_t* factory);
|
||||
static ret_t data_writer_factory_deinit(data_writer_factory_t* factory);
|
||||
|
||||
static data_writer_factory_t* s_data_writer_factory = NULL;
|
||||
|
||||
typedef struct _creator_item_t {
|
||||
char protocol[TK_NAME_LEN + 1];
|
||||
data_writer_create_t create;
|
||||
} creator_item_t;
|
||||
|
||||
static int32_t creator_item_cmp(const creator_item_t* iter, const char* protocol) {
|
||||
return strcmp(iter->protocol, protocol);
|
||||
}
|
||||
|
||||
data_writer_factory_t* data_writer_factory(void) {
|
||||
return s_data_writer_factory;
|
||||
}
|
||||
|
||||
data_writer_factory_t* data_writer_factory_create(void) {
|
||||
data_writer_factory_t* factory = TKMEM_ZALLOC(data_writer_factory_t);
|
||||
return_value_if_fail(factory != NULL, NULL);
|
||||
|
||||
return data_writer_factory_init(factory);
|
||||
}
|
||||
|
||||
static data_writer_factory_t* data_writer_factory_init(data_writer_factory_t* factory) {
|
||||
return_value_if_fail(factory != NULL, NULL);
|
||||
|
||||
darray_init(&(factory->creators), 0, default_destroy, (tk_compare_t)creator_item_cmp);
|
||||
|
||||
return factory;
|
||||
}
|
||||
|
||||
ret_t data_writer_factory_register(data_writer_factory_t* factory, const char* protocol,
|
||||
data_writer_create_t create) {
|
||||
creator_item_t* item = NULL;
|
||||
return_value_if_fail(factory != NULL && protocol != NULL && create != NULL, RET_BAD_PARAMS);
|
||||
|
||||
item = TKMEM_ZALLOC(creator_item_t);
|
||||
return_value_if_fail(item != NULL, RET_OOM);
|
||||
|
||||
item->create = create;
|
||||
tk_strncpy(item->protocol, protocol, TK_NAME_LEN);
|
||||
darray_push(&(factory->creators), item);
|
||||
|
||||
return RET_OK;
|
||||
}
|
||||
|
||||
data_writer_t* data_writer_factory_create_writer(data_writer_factory_t* factory, const char* url) {
|
||||
char protocol[TK_NAME_LEN + 1];
|
||||
const char* p = NULL;
|
||||
const creator_item_t* iter = NULL;
|
||||
return_value_if_fail(factory != NULL && url != NULL, NULL);
|
||||
|
||||
p = strchr(url, ':');
|
||||
memset(protocol, 0x00, sizeof(protocol));
|
||||
|
||||
if (p != NULL) {
|
||||
return_value_if_fail((p - url) < TK_NAME_LEN, NULL);
|
||||
strncpy(protocol, url, p - url);
|
||||
} else {
|
||||
strncpy(protocol, "file", 4);
|
||||
}
|
||||
|
||||
iter = darray_find(&(factory->creators), (void*)protocol);
|
||||
if (iter != NULL) {
|
||||
p = strstr(url, "://");
|
||||
|
||||
if (p == NULL) {
|
||||
p = url;
|
||||
} else {
|
||||
p += 3;
|
||||
}
|
||||
|
||||
return iter->create(p);
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
ret_t data_writer_factory_set(data_writer_factory_t* factory) {
|
||||
s_data_writer_factory = factory;
|
||||
|
||||
return RET_OK;
|
||||
}
|
||||
|
||||
static ret_t data_writer_factory_deinit(data_writer_factory_t* factory) {
|
||||
return_value_if_fail(factory != NULL, RET_BAD_PARAMS);
|
||||
|
||||
darray_deinit(&(factory->creators));
|
||||
|
||||
return RET_OK;
|
||||
}
|
||||
|
||||
ret_t data_writer_factory_destroy(data_writer_factory_t* factory) {
|
||||
return_value_if_fail(factory != NULL, RET_BAD_PARAMS);
|
||||
|
||||
data_writer_factory_deinit(factory);
|
||||
TKMEM_FREE(factory);
|
||||
|
||||
return RET_OK;
|
||||
}
|
101
src/tkc/data_writer_factory.h
Normal file
101
src/tkc/data_writer_factory.h
Normal file
@ -0,0 +1,101 @@
|
||||
/**
|
||||
* File: data_writer_factory.h
|
||||
* Author: AWTK Develop Team
|
||||
* Brief: data writer factory
|
||||
*
|
||||
* Copyright (c) 2020 - 2020 Guangzhou ZHIYUAN Electronics Co.,Ltd.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* License file for more details.
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* History:
|
||||
* ================================================================
|
||||
* 2020-03-01 Li XianJing <xianjimli@hotmail.com> created
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef TK_DATA_WRITER_FACTORY_H
|
||||
#define TK_DATA_WRITER_FACTORY_H
|
||||
|
||||
#include "tkc/darray.h"
|
||||
#include "tkc/data_writer.h"
|
||||
|
||||
BEGIN_C_DECLS
|
||||
|
||||
typedef data_writer_t* (*data_writer_create_t)(const char* args);
|
||||
|
||||
/**
|
||||
* @class data_writer_factory_t
|
||||
* data writer工厂。
|
||||
*
|
||||
*/
|
||||
typedef struct _data_writer_factory_t {
|
||||
/*private*/
|
||||
darray_t creators;
|
||||
} data_writer_factory_t;
|
||||
|
||||
/**
|
||||
* @method data_writer_factory
|
||||
* 获取缺省的data writer工厂对象。
|
||||
* @annotation ["constructor"]
|
||||
* @return {data_writer_factory_t*} 返回data writer工厂对象。
|
||||
*/
|
||||
data_writer_factory_t* data_writer_factory(void);
|
||||
|
||||
/**
|
||||
* @method data_writer_factory_set
|
||||
* 设置缺省的data writer工厂对象。
|
||||
* @param {data_writer_factory_t*} factory data writer工厂对象。
|
||||
*
|
||||
* @return {ret_t} 返回RET_OK表示成功,否则表示失败。
|
||||
*/
|
||||
ret_t data_writer_factory_set(data_writer_factory_t* factory);
|
||||
|
||||
/**
|
||||
* @method data_writer_factory_create
|
||||
* 创建data writer工厂对象。
|
||||
* @annotation ["constructor"]
|
||||
*
|
||||
* @return {data_writer_factory_t*} 返回data writer工厂对象。
|
||||
*/
|
||||
data_writer_factory_t* data_writer_factory_create(void);
|
||||
|
||||
/**
|
||||
* @method data_writer_factory_register
|
||||
* 注册data writer创建函数。
|
||||
* @param {data_writer_factory_t*} factory highlighter工厂对象。
|
||||
* @param {const char*} protocol 协议(如file)。
|
||||
* @param {data_writer_create_t} create data writer创建函数。
|
||||
*
|
||||
* @return {ret_t} 返回RET_OK表示成功,否则表示失败。
|
||||
*/
|
||||
ret_t data_writer_factory_register(data_writer_factory_t* factory, const char* protocol,
|
||||
data_writer_create_t create);
|
||||
/**
|
||||
* @method data_writer_factory_create_writer
|
||||
* 创建指定类型的data writer对象。
|
||||
* @annotation ["constructor"]
|
||||
* @param {data_writer_factory_t*} factory data writer工厂对象。
|
||||
* @param {const char*} url URL。
|
||||
*
|
||||
* @return {data_writer_t*} 返回data writer对象。
|
||||
*/
|
||||
data_writer_t* data_writer_factory_create_writer(data_writer_factory_t* factory, const char* url);
|
||||
|
||||
/**
|
||||
* @method data_writer_factory_destroy
|
||||
* 析构并释放data writer工厂对象。
|
||||
* @param {data_writer_factory_t*} factory data writer工厂对象。
|
||||
*
|
||||
* @return {ret_t} 返回RET_OK表示成功,否则表示失败。
|
||||
*/
|
||||
ret_t data_writer_factory_destroy(data_writer_factory_t* factory);
|
||||
|
||||
END_C_DECLS
|
||||
|
||||
#endif /*TK_DATA_WRITER_FACTORY_H*/
|
68
src/tkc/data_writer_file.c
Normal file
68
src/tkc/data_writer_file.c
Normal file
@ -0,0 +1,68 @@
|
||||
/**
|
||||
* File: data_writer.c
|
||||
* Author: AWTK Develop Team
|
||||
* Brief: data_writer
|
||||
*
|
||||
* Copyright (c) 2019 - 2020 Guangzhou ZHIYUAN Electronics Co.,Ltd.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* License file for more details.
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* History:
|
||||
* ================================================================
|
||||
* 2020-03-01 Li XianJing <xianjimli@hotmail.com> created
|
||||
*
|
||||
*/
|
||||
|
||||
#include "tkc/mem.h"
|
||||
#include "tkc/fs.h"
|
||||
#include "tkc/data_writer_file.h"
|
||||
|
||||
typedef struct _data_writer_file_t {
|
||||
data_writer_t data_writer;
|
||||
|
||||
fs_file_t* file;
|
||||
} data_writer_file_t;
|
||||
|
||||
static int32_t data_writer_file_write(data_writer_t* writer, uint64_t offset, const void* data,
|
||||
uint32_t size) {
|
||||
data_writer_file_t* file = (data_writer_file_t*)writer;
|
||||
return_value_if_fail(fs_file_seek(file->file, offset) == RET_OK, 0);
|
||||
|
||||
return fs_file_write(file->file, data, size);
|
||||
}
|
||||
|
||||
static ret_t data_writer_file_destroy(data_writer_t* writer) {
|
||||
data_writer_file_t* file = (data_writer_file_t*)writer;
|
||||
|
||||
fs_file_close(file->file);
|
||||
TKMEM_FREE(file);
|
||||
|
||||
return RET_OK;
|
||||
}
|
||||
|
||||
static data_writer_vtable_t s_data_writer_file_vtable = {
|
||||
.write = data_writer_file_write,
|
||||
.destroy = data_writer_file_destroy,
|
||||
};
|
||||
|
||||
data_writer_t* data_writer_file_create(const char* filename) {
|
||||
data_writer_file_t* file = NULL;
|
||||
return_value_if_fail(filename != NULL, NULL);
|
||||
file = TKMEM_ZALLOC(data_writer_file_t);
|
||||
return_value_if_fail(file != NULL, NULL);
|
||||
|
||||
file->file = fs_open_file(os_fs(), filename, "wb+");
|
||||
file->data_writer.vt = &s_data_writer_file_vtable;
|
||||
|
||||
if (file->file == NULL) {
|
||||
TKMEM_FREE(file);
|
||||
}
|
||||
|
||||
return (data_writer_t*)file;
|
||||
}
|
42
src/tkc/data_writer_file.h
Normal file
42
src/tkc/data_writer_file.h
Normal file
@ -0,0 +1,42 @@
|
||||
/**
|
||||
* File: data_writer_file.h
|
||||
* Author: AWTK Develop Team
|
||||
* Brief: data_writer file
|
||||
*
|
||||
* Copyright (c) 2019 - 2020 Guangzhou ZHIYUAN Electronics Co.,Ltd.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* License file for more details.
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* History:
|
||||
* ================================================================
|
||||
* 2020-03-01 Li XianJing <xianjimli@hotmail.com> created
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef TK_DATA_WRITER_FILE_H
|
||||
#define TK_DATA_WRITER_FILE_H
|
||||
|
||||
#include "tkc/data_writer.h"
|
||||
|
||||
BEGIN_C_DECLS
|
||||
|
||||
/**
|
||||
* @method data_writer_file_create
|
||||
* 创建基于文件的data writer。
|
||||
* @param {data_writer_t*} writer writer对象。
|
||||
*
|
||||
* @return {ret_t} 返回RET_OK表示成功,否则表示失败。
|
||||
*/
|
||||
data_writer_t* data_writer_file_create(const char* filename);
|
||||
|
||||
#define DATA_WRITER_FILE(writer) ((data_writer_t*)(writer))
|
||||
|
||||
END_C_DECLS
|
||||
|
||||
#endif /*TK_DATA_WRITER_FILE_H*/
|
22
tests/data_reader_factory_test.cc
Normal file
22
tests/data_reader_factory_test.cc
Normal file
@ -0,0 +1,22 @@
|
||||
#include "gtest/gtest.h"
|
||||
#include "tkc/data_reader_factory.h"
|
||||
#include "tkc/data_reader_file.h"
|
||||
|
||||
TEST(DataReaderFactory, basic) {
|
||||
data_reader_t* reader = NULL;
|
||||
data_reader_factory_t* f = data_reader_factory_create();
|
||||
reader = data_reader_factory_create_reader(f, "file://./tests/testdata/main.xml");
|
||||
ASSERT_EQ(reader == NULL, true);
|
||||
|
||||
ASSERT_EQ(data_reader_factory_register(f, "file", data_reader_file_create), RET_OK);
|
||||
|
||||
reader = data_reader_factory_create_reader(f, "file://./tests/testdata/main.xml");
|
||||
ASSERT_EQ(reader != NULL, true);
|
||||
data_reader_destroy(reader);
|
||||
|
||||
reader = data_reader_factory_create_reader(f, "./tests/testdata/main.xml");
|
||||
ASSERT_EQ(reader != NULL, true);
|
||||
|
||||
data_reader_destroy(reader);
|
||||
data_reader_factory_destroy(f);
|
||||
}
|
24
tests/data_writer_factory_test.cc
Normal file
24
tests/data_writer_factory_test.cc
Normal file
@ -0,0 +1,24 @@
|
||||
#include "gtest/gtest.h"
|
||||
#include "tkc/data_writer_factory.h"
|
||||
#include "tkc/data_writer_file.h"
|
||||
|
||||
TEST(DataWriterFactory, basic) {
|
||||
data_writer_t* writer = NULL;
|
||||
data_writer_factory_t* f = data_writer_factory_create();
|
||||
writer = data_writer_factory_create_writer(f, "file://./tests/testdata/test.xml");
|
||||
ASSERT_EQ(writer == NULL, true);
|
||||
|
||||
ASSERT_EQ(data_writer_factory_register(f, "file", data_writer_file_create), RET_OK);
|
||||
|
||||
writer = data_writer_factory_create_writer(f, "file://./tests/testdata/test.xml");
|
||||
ASSERT_EQ(writer != NULL, true);
|
||||
data_writer_destroy(writer);
|
||||
|
||||
writer = data_writer_factory_create_writer(f, "./tests/testdata/test.xml");
|
||||
ASSERT_EQ(writer != NULL, true);
|
||||
data_writer_write(writer, 0, "hello ", 6);
|
||||
data_writer_write(writer, 7, "world", 5);
|
||||
data_writer_destroy(writer);
|
||||
|
||||
data_writer_factory_destroy(f);
|
||||
}
|
BIN
tests/testdata/test.xml
vendored
Normal file
BIN
tests/testdata/test.xml
vendored
Normal file
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user