微对象的初入(5)
随笔随笔,随心所欲,果然是要命,一些咚咚没有作说明,会出问题的。只能想到什么写点什么。
这章节以及之前的章节,都是我辛苦一个一个文字敲出来的。包括所有代码。虽然没难度,但也辛苦的。+_+
这些代码都是为内存模式存储微DB服务的,是最底层代码,可以轻松移植到LINUX下。至于再上一层的,我用C++实现的,时间问题,这里可能不会载入。
这个咚咚,其实就是一个NOSQL,只是,我用了他,费点时间实现了他。并且,将他做成纯纯的MemoryDB,还暂时抛掉了一切不必要的东西。简单高效适用于我要的。
1 POB_TREE_NODE_T _stdcall root(POB_TREE_HEAD_T head)
2 {
3 if (head != NULL && head->root != NULL)
4 {
5 return head->root;
6 }
7 return NULL;
8 }
9
10 POB_TREE_NODE_T __stdcall next(POB_TREE_NODE_T pnode)
11 {
12 if (pnode == NULL && pnode->next != NULL)
13 {
14 return pnode->next;
15 }
16 return NULL;
17 }
18
19 POB_TREE_NODE_T __stdcall before(POB_TREE_NODE_T pnode)
20 {
21 if (pnode == NULL && pnode->before != NULL)
22 {
23 return pnode->before;
24 }
25 return NULL;
26 }
27
28 POB_TREE_NODE_T __stdcall child(POB_TREE_NODE_T pnode)
29 {
30 if (pnode == NULL && pnode->child != NULL)
31 {
32 return pnode->child;
33 }
34 return NULL;
35 }
36
37 POB_TREE_NODE_T __stdcall parent(POB_TREE_NODE_T pnode)
38 {
39 if (pnode == NULL && pnode->child != NULL)
40 {
41 return pnode->child;
42 }
43 return NULL;
44 }
45
46 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)
47 {
48 POB_RESULT_T presult = _ob_new_error(ppresult, true, 0, NULL);
49 if (presult == NULL)
50 {
51 return false;
52 }
53 POB_TREE_NODE_T pnode = (POB_TREE_NODE_T)malloc(sizeof(OB_TREE_NODE_T));
54 if (pnode == NULL)
55 {
56 (*ppresult) = _ob_new_error(ppresult, false, 1, "malloc failed.");
57 return false;
58 }
59
60 memset(pnode, 0x00, sizeof(OB_TREE_NODE_T));
61
62 POB_ENDOBJ_T pobj = NULL;
63 bool ret = ob_new_obj_null(&pobj, ppresult, name, len, data);
64 if (ret == false)
65 {
66 free(pnode);
67 _ob_set_error(presult, false, 3, "ob_new_obj_null failed.");
68 return false;
69 }
70
71 pnode->obj = pobj;
72
73 (*ppnode) = pnode;
74
75 return true;
76 }
77
78 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)
79 {
80 POB_RESULT_T presult = _ob_new_error(ppresult, true, 0, NULL);
81 if (presult == NULL)
82 {
83 return false;
84 }
85 POB_TREE_NODE_T pnode = (POB_TREE_NODE_T)malloc(sizeof(OB_TREE_NODE_T));
86 if (pnode == NULL)
87 {
88 (*ppresult) = _ob_new_error(ppresult, false, 1, "malloc failed.");
89 return false;
90 }
91
92 memset(pnode, 0x00, sizeof(OB_TREE_NODE_T));
93
94 POB_ENDOBJ_T pobj = NULL;
95 bool ret = ob_new_obj_bool(&pobj, ppresult, name, len, data);
96 if (ret == false