linuxOS_D21X/source/artinchip/awtk-ui/awtk/src/csv/csv_file.h

373 lines
8.7 KiB
C
Raw Normal View History

2024-11-29 08:23:11 +00:00
/**
* File: csv_file.h
* Author: AWTK Develop Team
* Brief: csv file
*
* Copyright (c) 2020 - 2023 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-06-08 Li XianJing <xianjimli@hotmail.com> created
*
*/
#ifndef TK_CSV_FILE_H
#define TK_CSV_FILE_H
#include "tkc/istream.h"
BEGIN_C_DECLS
typedef struct _csv_row_t {
char* buff;
uint32_t size : 30;
uint32_t checked : 1;
uint32_t should_free_buff : 1;
} csv_row_t;
typedef struct _csv_rows_t {
csv_row_t* rows;
uint32_t size;
uint32_t capacity;
} csv_rows_t;
struct _csv_file_t;
typedef struct _csv_file_t csv_file_t;
/**
*
* RET_OK:
* RET_STOP:
* RET_FAIL:
*/
typedef ret_t (*csv_file_filter_t)(void* ctx, csv_file_t* csv, uint32_t index, csv_row_t* row);
/**
* @class csv_file_t
* CSV文件
*/
struct _csv_file_t {
/**
* @property {bool_t} has_title
*
*/
bool_t has_title;
/*private*/
char sep;
uint32_t cols;
char* filename;
csv_rows_t rows;
void* filter_ctx;
csv_file_filter_t filter;
};
/**
* @method csv_file_create_empty
*
* csv对象
*
* @param {char} sep
* @param {csv_file_filter_t} filter
* @param {void*} ctx
*
* @return {csv_file_t*} csv对象
*/
csv_file_t* csv_file_create_empty(char sep, csv_file_filter_t filter, void* ctx);
/**
* @method csv_file_set_filter
*
*
*
* @param {csv_file_t*} csv csv对象
* @param {csv_file_filter_t} filter
* @param {void*} ctx
*
* @return {ret_t} RET_OK表示成功
*/
ret_t csv_file_set_filter(csv_file_t* csv, csv_file_filter_t filter, void* ctx);
/**
* @method csv_file_create
*
* csv对象
*
* @param {const char*} filename
* @param {char} sep
*
* @return {csv_file_t*} csv对象
*/
csv_file_t* csv_file_create(const char* filename, char sep);
/**
* @method csv_file_create_with_buff
*
* buff创建csv对象
*
* @param {const char*} buff
* @param {uint32_t} size
* @param {char} sep
*
* @return {csv_file_t*} csv对象
*/
csv_file_t* csv_file_create_with_buff(const char* buff, uint32_t size, char sep);
/**
* @method csv_file_load_file
*
* csv
*
* @param {csv_file_t*} csv csv对象
* @param {const char*} filename
*
* @return {ret_t} RET_OK表示成功
*/
ret_t csv_file_load_file(csv_file_t* csv, const char* filename);
/**
* @method csv_file_load_buff
*
* csv
*
* @param {csv_file_t*} csv csv对象
* @param {const char*} buff
* @param {uint32_t} size
*
* @return {ret_t} RET_OK表示成功
*/
ret_t csv_file_load_buff(csv_file_t* csv, const char* buff, uint32_t size);
/**
* @method csv_file_reload
*
*
*
* @param {csv_file_t*} csv csv对象
*
* @return {ret_t} RET_OK表示成功
*/
ret_t csv_file_reload(csv_file_t* csv);
/**
* @method csv_file_get
*
*
*
* @param {csv_file_t*} csv csv对象
* @param {uint32_t} row
* @param {uint32_t} col
*
* @return {const char*}
*/
const char* csv_file_get(csv_file_t* csv, uint32_t row, uint32_t col);
/**
* @method csv_file_set
*
*
*
* @param {csv_file_t*} csv csv对象
* @param {uint32_t} row
* @param {uint32_t} col
* @param {const char*} value
*
* @return {ret_t} RET_OK表示成功
*/
ret_t csv_file_set(csv_file_t* csv, uint32_t row, uint32_t col, const char* value);
/**
* @method csv_file_set_row_checked
*
*
*
* @param {csv_file_t*} csv csv对象
* @param {uint32_t} row
* @param {bool_t} checked
*
* @return {ret_t} RET_OK表示成功
*/
ret_t csv_file_set_row_checked(csv_file_t* csv, uint32_t row, bool_t checked);
/**
* @method csv_file_is_row_checked
*
*
*
* @param {csv_file_t*} csv csv对象
* @param {uint32_t} row
*
* @return {bool_t} TRUE表示勾选
*/
bool_t csv_file_is_row_checked(csv_file_t* csv, uint32_t row);
/**
* @method csv_file_remove_checked_rows
*
*
*
* @param {csv_file_t*} csv csv对象
*
* @return {ret_t} RET_OK表示成功
*/
ret_t csv_file_remove_checked_rows(csv_file_t* csv);
/**
* @method csv_file_get_title
*
* (NULL)
*
* @param {csv_file_t*} csv csv对象
*
* @return {const char*}
*/
const char* csv_file_get_title(csv_file_t* csv);
/**
* @method csv_file_get_rows
*
* ()
*
* @param {csv_file_t*} csv csv对象
*
* @return {uint32_t}
*/
uint32_t csv_file_get_rows(csv_file_t* csv);
/**
* @method csv_file_get_checked_rows
*
* checked行数()
*
* @param {csv_file_t*} csv csv对象
*
* @return {uint32_t} checked行数
*/
uint32_t csv_file_get_checked_rows(csv_file_t* csv);
/**
* @method csv_file_get_cols
*
*
*
* @param {csv_file_t*} csv csv对象
*
* @return {uint32_t}
*/
uint32_t csv_file_get_cols(csv_file_t* csv);
/**
* @method csv_file_remove_row
*
*
*
* @param {csv_file_t*} csv csv对象
* @param {uint32_t} row
*
* @return {ret_t} RET_OK表示成功
*/
ret_t csv_file_remove_row(csv_file_t* csv, uint32_t row);
/**
* @method csv_file_append_row
*
*
*
* @param {csv_file_t*} csv csv对象
* @param {const char*} data
*
* @return {ret_t} RET_OK表示成功
*/
ret_t csv_file_append_row(csv_file_t* csv, const char* data);
/**
* @method csv_file_insert_row
*
*
*
* @param {csv_file_t*} csv csv对象
* @param {uint32_t} row
* @param {const char*} data
*
* @return {ret_t} RET_OK表示成功
*/
ret_t csv_file_insert_row(csv_file_t* csv, uint32_t row, const char* data);
/**
* @method csv_file_save
*
*
*
* @param {csv_file_t*} csv csv对象
* @param {const char*} filename
*
* @return {ret_t} RET_OK表示成功
*/
ret_t csv_file_save(csv_file_t* csv, const char* filename);
/**
* @method csv_file_clear
*
*
*
* @param {csv_file_t*} csv csv对象
*
* @return {ret_t} RET_OK表示成功
*/
ret_t csv_file_clear(csv_file_t* csv);
/**
* @method csv_file_load_file
*
*
*
* @param {csv_file_t*} csv csv对象
* @param {const char*} filename
*
* @return {ret_t} RET_OK表示成功
*/
ret_t csv_file_load_file(csv_file_t* csv, const char* filename);
/**
* @method csv_file_destroy
*
* csv对象
*
* @param {csv_file_t*} csv csv对象
*
* @return {ret_t} RET_OK表示成功
*/
ret_t csv_file_destroy(csv_file_t* csv);
/*public for test*/
const char* csv_file_get_by_name(csv_file_t* csv, uint32_t row, const char* name);
int32_t csv_file_get_col_of_name(csv_file_t* csv, const char* name);
csv_row_t* csv_file_get_row(csv_file_t* csv, uint32_t row);
uint32_t csv_row_count_cols(csv_row_t* row);
const char* csv_row_get(csv_row_t* row, uint32_t col);
ret_t csv_row_set(csv_row_t* row, uint32_t col, const char* value);
ret_t csv_row_init(csv_row_t* row, char* buff, uint32_t size, bool_t should_free_buff);
ret_t csv_row_reset(csv_row_t* row);
ret_t csv_rows_init(csv_rows_t* rows, uint32_t init_capacity);
ret_t csv_rows_remove(csv_rows_t* rows, uint32_t row);
csv_row_t* csv_rows_append(csv_rows_t* rows);
csv_row_t* csv_rows_insert(csv_rows_t* rows, uint32_t row);
csv_row_t* csv_rows_get(csv_rows_t* rows, uint32_t row);
ret_t csv_rows_reset(csv_rows_t* rows);
ret_t csv_row_to_str(csv_row_t* row, str_t* str, char sep);
ret_t csv_row_set_data(csv_row_t* row, const char* data, char sep);
END_C_DECLS
#endif /*TK_CSV_FILE_H*/