微对象的初入(2)
(一)存储选择:微型对象数据库
这里是随笔,不会详述内容,下面都是用实验样例来解释说明。不明白的可以闪人了。
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。1。微型对象数据库
例:
{
"食指":{
"对象名":"食指"
"左右手":"左手"
"属性":[
{"重量":"0.1公斤"},
{"肤色":"黄"},
{"皮肤面积":"0.05平米"},
{"血":"0.001公斤"},
{"骨":"0.002公斤"},
{"皮":"0.001公斤"},
{"肉":"0.005公斤"},
{"指甲":{...}},
。。。
]
"行为":[
{"掌":""},
{"拳":""},
{"1":"手势"},
{"指示方向":"手势"},
{"勾勾手":"手势,来我这儿"},
。。。
]
}
}
1.1 NOSQL库实现
1.1.1 对象类型
enum OB_ENDOBJ_TYPE_T {
OB_ENDOBJ_UNKNOWN = -1,
OB_ENDOBJ_NULL = 1,
OB_ENDOBJ_BOOL = 2,
OB_ENDOBJ_INTEGER = 3,
OB_ENDOBJ_DOUBLE = 4,
OB_ENDOBJ_STRING = 5,
OB_ENDOBJ_ARRAY = 6,
OB_ENDOBJ_OBJECT = 7
};
1.1.2 结构定义
typedef struct _OB_RESULT_T {
bool result;
unsigned char* msg;
unsigned int code;
}OB_RESULT_T, *POB_RESULT_T;
typedef struct _OB_ENDOBJ_T {
enum OBJ_TYPE type;
size_t len;
unsigned char * name;
unsigned char * value;
}OB_ENDOBJ_T, *POB_ENDOBJ_T;
typedef struct _OB_TREE_NODE_T {
POB_ENDOBJ_T obj;
struct _OB_TREE_NODE_T* before;
struct _OB_TREE_NODE_T* next;
struct _OB_TREE_NODE_T* parent;
struct _OB_TREE_NODE_T* child;
}OB_TREE_NODE_T, *POB_TREE_NODE_T;
typedef struct _OB_TREE_HEAD_T {
unsigned char ob_name[256];
unsigned char ob_hash[1024];
unsigned char ob_version[10][256];
POB_TREE_NODE_T root;
}OB_TREE_HEAD_T, *POB_TREE_HEAD_T;
1.1.3 数据操作方法
1.1.3.1 方法定义
// 创建对象 操作方法定义
OB_API bool __stdcall ob_new_obj_null(POB_ENDOBJ_T* ppobj, POB_RESULT_T* ppresult, unsigned char* name, size_t len);
OB_API bool __stdcall ob_new_obj_bool(POB_ENDOBJ_T* ppobj, POB_RESULT_T* ppresult, unsigned char* name, size_t len);
OB_API bool __stdcall ob_new_obj_integer(POB_ENDOBJ_T* ppobj, POB_RESULT_T* ppresult, unsigned char* name, size_t len);
OB_API bool __stdcall ob_new_obj_double(POB_ENDOBJ_T* ppobj, POB_RESULT_T* ppresult, unsigned char* name, size_t len);
OB_API bool __stdcall ob_new_obj_string(POB_ENDOBJ_T* ppobj, POB_RESULT_T* ppresult, unsigned char* name, size_t len, size_t stringlen);
OB_API bool __stdcall ob_new_obj_array(POB_ENDOBJ_T* ppobj, POB_RESULT_T* ppresult, unsigned char* name, size_t len, enum OBJ_TYPE type, size_t count);
// 创建对象节点 操作方法定义
OB_API bool __stdcall ob_new_node_null(POB_TREE_NODE_T* ppnode, POB_RESULT_T* ppresult, unsigned char* name, size_t len);
OB_API bool __stdcall ob_new_node_bool(POB_TREE_NODE_T* ppnode, POB_RESULT_T* ppresult, unsigned char* name, size_t len);
OB_API bool __stdcall ob_new_node_integer(POB_TREE_NODE_T* ppnode, POB_RESULT_T* ppresult, unsigned char* name, size_t len);
OB_API bool __stdcall ob_new_node_double(POB_TREE_NODE_T* ppnode, POB_RESULT_T* ppresult, unsigned char* name, size_t len);
OB_API bool __stdcall ob_new_node_string(POB_TREE_NODE_T* ppnode, POB_RESULT_T* ppresult, unsigned char* name, size_t len, size_t stringlen);
OB_API bool __stdcall ob_new_node_array(POB_TREE_NODE_T* ppnode, POB_RESULT_T* ppresult, unsigned char* name, size_t len, size_t stringlen, enum OB_ENDOBJ_TYPE type, size_t count);
// 遍历
POB_TREE_NODE_T _stdcall root(POB_TREE_HEAD_T head);
POB_TREE_NODE_T __stdcall next(POB_TREE_NODE_T pnode);
POB_TREE_NODE_T __stdcall before(POB_TREE_NODE_T pnode);
POB_TREE_NODE_T __stdcall child(POB_TREE_NODE_T pnode);
POB_TREE_NODE_T __stdcall parent(POB_TREE_NODE_T pnode);
// 创建对象存储
OB_API POB_TREE_HEAD_T __stdcall new_ob(unsigned char* ob_name, size_t name_len, unsigned char* ob_version, size_t ver_len);
OB_API bool __stdcall delete_ob(POB_TREE_HEAD_T head);
// 对象节点 增删改操作方法定义
OB_API bool __stdcall new_root(POB_TREE_HEAD_T head, POB_TREE_NODE_T* ppnode, POB_RESULT_T* ppresult);
OB_API bool __stdcall insert_node(POB_TREE_NODE_T pcurrentnode, POB_TREE_NODE_T* ppnode, POB_RESULT_T* ppresult);
OB_API bool __stdcall delete_node(POB_TREE_NODE_T* ppnode, POB_RESULT_T* ppresult);
