代码地址: github.com/WangHao-nlp…
第八章在原有基础上进行完善, 增加了许多增删改查接口, 并对原来的json值里的数组和对象类型增加capacity属性。
leptjson.h
增加capacity属性
struct lept_value {
union {
struct { lept_member* m; size_t size, capacity; }o; // 增加了容量
struct { lept_value* e; size_t size, capacity; } a;
struct { char* s; size_t len; } s;
double n;
}u;
lept_type type;
};
增加的函数接口
// 复制、移动、交换
void lept_copy(lept_value* dst, const lept_value* src);
void lept_move(lept_value* dst, lept_value* src);
void lept_swap(lept_value* lhs, lept_value* rhs);
// 比较两个json值是否一样
int lept_is_equal(const lept_value* lhs, const lept_value* rhs);
void lept_set_array(lept_value* v, size_t capacity); // 给数组分配内存
size_t lept_get_array_capacity(const lept_value* v); // 获得数组内存
void lept_reserve_array(lept_value* v, size_t capacity); // 将数组容量扩充到capacity,如果原来数组容量比capacity大,则无操作
void lept_shrink_array(lept_value* v); // 收缩数组容量
void lept_clear_array(lept_value* v); // 清空数组
lept_value* lept_pushback_array_element(lept_value* v); // 插入元素
void lept_popback_array_element(lept_value* v);
lept_value* lept_insert_array_element(lept_value* v, size_t index);
void lept_erase_array_element(lept_value* v, size_t index, size_t count); // 删除元素
void lept_set_object(lept_value* v, size_t capacity);
size_t lept_get_object_capacity(const lept_value* v);
void lept_reserve_object(lept_value* v, size_t capacity);
void lept_shrink_object(lept_value* v);
void lept_clear_object(lept_value* v);
// 查询一个键值是否存在
size_t lept_find_object_index(const lept_value* v, const char* key, size_t klen);
lept_value* lept_find_object_value(lept_value* v, const char* key, size_t klen);
lept_value* lept_set_object_value(lept_value* v, const char* key, size_t klen);
void lept_remove_object_value(lept_value* v, size_t index);
leptjson.cpp
leptjson.cpp注释见github代码。
解析结果