微对象的初入(2)

(一)存储选择:微型对象数据库

这里是随笔,不会详述内容,下面都是用实验样例来解释说明。

1。微型对象数据库

例:

{

    "食指":{

        "对象名":"食指"

        "左右手":"左手"

        "属性":[

            {"重量":"0.1公斤"},

            {"肤色":""},

            {"皮肤面积":"0.05平米"},

            {"":"0.001公斤"},

            {"":"0.002公斤"},

            {"":"0.001公斤"},

            {"":"0.005公斤"},

            {"指甲":{...}},

            。。。

        ]

        "行为":[

            {"":""},

            {"":""},

            {"1":"手势"},

            {"指示方向":"手势"},

            {"勾勾手":"手势,来我这儿"},

            。。。

        ]

   }

}

 

1.1 NOSQL库实现

1.1.1 对象类型

 1 enum OB_ENDOBJ_TYPE_T {
 2  OB_ENDOBJ_UNKNOWN = -1,
 3  OB_ENDOBJ_NULL = 1,
 4  OB_ENDOBJ_BOOL = 2,
 5  OB_ENDOBJ_INTEGER = 3,
 6  OB_ENDOBJ_DOUBLE = 4,
 7  OB_ENDOBJ_STRING = 5,
 8  OB_ENDOBJ_ARRAY = 6,
 9  OB_ENDOBJ_OBJECT = 7
10 };

 

1.1.2 结构定义

 1 typedef struct _OB_RESULT_T {  
 2 
 3 bool result;  
 4 
 5 unsigned char* msg;
 6 
 7  unsigned int code;
 8 
 9 }OB_RESULT_T, *POB_RESULT_T;
10 
11 typedef struct _OB_ENDOBJ_T {
12 
13  enum OBJ_TYPE type;
14 
15  size_t len;
16 
17  unsigned char * name;
18 
19  unsigned char * value; 
20 
21 }OB_ENDOBJ_T, *POB_ENDOBJ_T;
22 
23 typedef struct _OB_TREE_NODE_T {
24 
25  POB_ENDOBJ_T obj;
26 
27  struct _OB_TREE_NODE_T* before;
28 
29  struct _OB_TREE_NODE_T* next;
30 
31  struct _OB_TREE_NODE_T* parent;
32 
33  struct _OB_TREE_NODE_T* child;
34 
35 }OB_TREE_NODE_T, *POB_TREE_NODE_T;
36 
37 typedef struct _OB_TREE_HEAD_T {
38 
39  unsigned char ob_name[256];
40 
41  unsigned char ob_hash[1024];
42 
43  unsigned char ob_version[10][256];
44 
45  POB_TREE_NODE_T root;
46 
47 }OB_TREE_HEAD_T, *POB_TREE_HEAD_T;

 

1.1.3 数据操作方法

1.1.3.1 方法定义

 1 // 创建对象 操作方法定义
 2 
 3 OB_API bool __stdcall ob_new_obj_null(POB_ENDOBJ_T* ppobj, POB_RESULT_T* ppresult, OB_STRING_T name, OB_UINT_T len, OB_NULL_T data);
 4 OB_API bool __stdcall ob_new_obj_bool(POB_ENDOBJ_T* ppobj, POB_RESULT_T* ppresult, OB_STRING_T name, OB_UINT_T len, OB_BOOL_T data);
 5 OB_API bool __stdcall ob_new_obj_integer(POB_ENDOBJ_T* ppobj, POB_RESULT_T* ppresult, OB_STRING_T name, OB_UINT_T len, OB_INT_T data);
 6 OB_API bool __stdcall ob_new_obj_double(POB_ENDOBJ_T* ppobj, POB_RESULT_T* ppresult, OB_STRING_T name, OB_UINT_T len, OB_DOUBLE_T data);
 7 OB_API bool __stdcall ob_new_obj_string(POB_ENDOBJ_T* ppobj, POB_RESULT_T* ppresult, OB_STRING_T name, OB_UINT_T len, OB_STRING_T data, OB_UINT_T datalen);
 8 OB_API bool __stdcall ob_new_obj_array(POB_ENDOBJ_T* ppobj, POB_RESULT_T* ppresult, OB_STRING_T name, OB_UINT_T len, OB_ARRAY_T data, enum OB_ENDOBJ_TYPE_T type, OB_UINT_T count);
 9 OB_API bool __stdcall ob_new_obj_array_string(POB_ENDOBJ_T* ppobj, POB_RESULT_T* ppresult, OB_STRING_T name, OB_UINT_T len, OB_ARRAY_STRING_T data, OB_UINT_T count);
10 
11 // 创建对象节点 操作方法定义
12 
13 OB_API bool __stdcall ob_new_node_null(POB_TREE_NODE_T* ppnode, POB_RESULT_T* ppresult, OB_STRING_T name, OB_UINT_T len, OB_NULL_T data);
14 OB_API bool __stdcall ob_new_node_bool(POB_TREE_NODE_T* ppnode, POB_RESULT_T* ppresult, OB_STRING_T name, OB_UINT_T len, OB_BOOL_T data);
15 OB_API bool __stdcall ob_new_node_integer(POB_TREE_NODE_T* ppnode, POB_RESULT_T* ppresult, OB_STRING_T name, OB_UINT_T len, OB_INT_T data);
16 OB_API bool __stdcall ob_new_node_double(POB_TREE_NODE_T* ppnode, POB_RESULT_T* ppresult, OB_STRING_T name, OB_UINT_T len, OB_DOUBLE_T data);
17 OB_API bool __stdcall ob_new_node_string(POB_TREE_NODE_T* ppnode, POB_RESULT_T* ppresult, OB_STRING_T name, OB_UINT_T len, OB_STRING_T data, OB_UINT_T stringlen);
18 OB_API bool __stdcall ob_new_node_array(POB_TREE_NODE_T* ppnode, POB_RESULT_T* ppresult, OB_STRING_T name, OB_UINT_T len, OB_ARRAY_T data, enum OB_ENDOBJ_TYPE_T type, OB_UINT_T count);
19 OB_API bool __stdcall ob_new_node_array_string(POB_TREE_NODE_T* ppnode, POB_RESULT_T* ppresult, OB_STRING_T name, OB_UINT_T len, OB_ARRAY_STRING_T data, OB_UINT_T count);
20 
21 // 遍历
22 
23 OB_API POB_TREE_NODE_T _stdcall root(POB_TREE_HEAD_T head);
24 OB_API POB_TREE_NODE_T __stdcall next(POB_TREE_NODE_T pnode);
25 OB_API POB_TREE_NODE_T __stdcall before(POB_TREE_NODE_T pnode);
26 OB_API POB_TREE_NODE_T __stdcall child(POB_TREE_NODE_T pnode);
27 OB_API POB_TREE_NODE_T __stdcall parent(POB_TREE_NODE_T pnode);
28 
29  
30 
31 // 创建对象存储
32 
33 OB_API POB_TREE_HEAD_T __stdcall new_ob(POB_RESULT_T*ppresult, OB_STRING_T ob_name, OB_UINT_T name_len, OB_STRING_T ob_version, OB_UINT_T ver_len);
34 OB_API bool __stdcall delete_ob(POB_TREE_HEAD_T head);
35 
36 // 对象节点 增删改操作方法定义
37 
38 OB_API bool __stdcall new_root(POB_TREE_HEAD_T head, POB_TREE_NODE_T* ppnode, POB_RESULT_T* ppresult);
39 OB_API bool __stdcall insert_node(POB_TREE_NODE_T pcurrentnode, POB_TREE_NODE_T* ppnode, POB_RESULT_T* ppresult);
40 OB_API bool __stdcall delete_node(POB_TREE_NODE_T* ppnode, POB_RESULT_T* ppresult);

 

posted on 2019-04-18 08:51  公羽随笔  阅读(139)  评论(0编辑  收藏  举报

导航