comparison src/parallel_execution/rb_tree.c @ 149:63ab65b28466

Add Gearef macro
author one
date Thu, 10 Nov 2016 20:37:52 +0900
parents 473b7d990a1f
children 73c393f0dca3
comparison
equal deleted inserted replaced
148:473b7d990a1f 149:63ab65b28466
41 struct Node* newNode = &ALLOCATE(context, Node)->node; 41 struct Node* newNode = &ALLOCATE(context, Node)->node;
42 goto put(context, 42 goto put(context,
43 &context->data[D_Stack]->stack, 43 &context->data[D_Stack]->stack,
44 &context->data[D_Tree]->tree, 44 &context->data[D_Tree]->tree,
45 &context->data[D_Node]->node, 45 &context->data[D_Node]->node,
46 &context->data[D_Traverse]->traverse, 46 &context->data[D_Traverse]->Traverse,
47 context->data[D_Tree]->tree.root, 47 context->data[D_Tree]->tree.root,
48 newNode 48 newNode
49 ); 49 );
50 } 50 }
51 51
58 goto meta(context, traverse->nodeStack->push); 58 goto meta(context, traverse->nodeStack->push);
59 } 59 }
60 60
61 __code replaceNode_stub(struct Context* context) { 61 __code replaceNode_stub(struct Context* context) {
62 goto replaceNode(context, 62 goto replaceNode(context,
63 &context->data[D_Traverse]->traverse, 63 &context->data[D_Traverse]->Traverse,
64 context->data[D_Traverse]->traverse.current, 64 context->data[D_Traverse]->Traverse.current,
65 context->data[D_Traverse]->traverse.newNode, 65 //context->data[D_Traverse]->Traverse.newNode,
66 Gearef(context, Traverse)->newNode,
66 &context->data[D_Stack]->stack); 67 &context->data[D_Stack]->stack);
67 } 68 }
68 69
69 __code replaceNode1(struct Context* context, struct Traverse* traverse, struct Node* node, struct Node* oldNode, struct Node* newNode, struct Node* newnewNode, int result) { 70 __code replaceNode1(struct Context* context, struct Traverse* traverse, struct Node* node, struct Node* oldNode, struct Node* newNode, struct Node* newnewNode, int result) {
70 if (result == EQ) { 71 if (result == EQ) {
88 } 89 }
89 90
90 __code replaceNode1_stub(struct Context* context) { 91 __code replaceNode1_stub(struct Context* context) {
91 struct Node* newnewNode = &ALLOCATE(context, Node)->node; 92 struct Node* newnewNode = &ALLOCATE(context, Node)->node;
92 goto replaceNode1(context, 93 goto replaceNode1(context,
93 &context->data[D_Traverse]->traverse, 94 &context->data[D_Traverse]->Traverse,
94 &context->data[D_Node]->node, 95 &context->data[D_Node]->node,
95 context->data[D_Traverse]->traverse.current, 96 context->data[D_Traverse]->Traverse.current,
96 context->data[D_Traverse]->traverse.previous, 97 context->data[D_Traverse]->Traverse.previous,
97 newnewNode, 98 newnewNode,
98 context->data[D_Traverse]->traverse.result); 99 context->data[D_Traverse]->Traverse.result);
99 } 100 }
100 101
101 __code insertNode(struct Context* context, struct Traverse* traverse, struct Stack *nodeStack, struct Node* node, struct Node* newNode) { 102 __code insertNode(struct Context* context, struct Traverse* traverse, struct Stack *nodeStack, struct Node* node, struct Node* newNode) {
102 *newNode = *node; 103 *newNode = *node;
103 newNode->color = Red; 104 newNode->color = Red;
107 goto meta(context, traverse->nodeStack->get2); 108 goto meta(context, traverse->nodeStack->get2);
108 } 109 }
109 110
110 __code insertNode_stub(struct Context* context) { 111 __code insertNode_stub(struct Context* context) {
111 goto insertNode(context, 112 goto insertNode(context,
112 &context->data[D_Traverse]->traverse, 113 &context->data[D_Traverse]->Traverse,
113 &context->data[D_Stack]->stack, 114 &context->data[D_Stack]->stack,
114 &context->data[D_Node]->node, 115 &context->data[D_Node]->node,
115 context->data[D_Traverse]->traverse.newNode); 116 context->data[D_Traverse]->Traverse.newNode);
116 } 117 }
117 118
118 __code insertCase1(struct Context* context,struct Traverse* traverse, struct Tree* tree,struct Node *parent, struct Node *grandparent) { 119 __code insertCase1(struct Context* context,struct Traverse* traverse, struct Tree* tree,struct Node *parent, struct Node *grandparent) {
119 if (parent != NULL) { 120 if (parent != NULL) {
120 traverse->parent = parent; 121 traverse->parent = parent;
125 goto meta(context, C_stackClear); 126 goto meta(context, C_stackClear);
126 } 127 }
127 128
128 __code insertCase1_stub(struct Context* context) { 129 __code insertCase1_stub(struct Context* context) {
129 goto insertCase1(context, 130 goto insertCase1(context,
130 &context->data[D_Traverse]->traverse, 131 &context->data[D_Traverse]->Traverse,
131 &context->data[D_Tree]->tree, 132 &context->data[D_Tree]->tree,
132 &context->data[D_Stack]->stack.data->node, 133 &context->data[D_Stack]->stack.data->node,
133 &context->data[D_Stack]->stack.data1->node); 134 &context->data[D_Stack]->stack.data1->node);
134 } 135 }
135 136
139 } 140 }
140 goto meta(context,C_insertCase3); 141 goto meta(context,C_insertCase3);
141 } 142 }
142 143
143 __code insertCase2_stub(struct Context* context) { 144 __code insertCase2_stub(struct Context* context) {
144 goto insertCase2(context, &context->data[D_Traverse]->traverse); 145 goto insertCase2(context, &context->data[D_Traverse]->Traverse);
145 } 146 }
146 147
147 __code insertCase3(struct Context* context, struct Traverse* traverse, struct Stack* nodeStack) { 148 __code insertCase3(struct Context* context, struct Traverse* traverse, struct Stack* nodeStack) {
148 struct Node* uncle; 149 struct Node* uncle;
149 150
164 } 165 }
165 goto meta(context, C_insertCase4); 166 goto meta(context, C_insertCase4);
166 } 167 }
167 168
168 __code insertCase3_stub(struct Context* context) { 169 __code insertCase3_stub(struct Context* context) {
169 goto insertCase3(context, &context->data[D_Traverse]->traverse, 170 goto insertCase3(context, &context->data[D_Traverse]->Traverse,
170 &context->data[D_Stack]->stack 171 &context->data[D_Stack]->stack
171 ); 172 );
172 } 173 }
173 174
174 __code insertCase4(struct Context* context, struct Traverse* traverse, struct RotateTree* rotateTree) { 175 __code insertCase4(struct Context* context, struct Traverse* traverse, struct RotateTree* rotateTree) {
198 199
199 goto meta(context, C_insertCase5); 200 goto meta(context, C_insertCase5);
200 } 201 }
201 202
202 __code insertCase4_stub(struct Context* context) { 203 __code insertCase4_stub(struct Context* context) {
203 goto insertCase4(context, &context->data[D_Traverse]->traverse, &context->data[D_RotateTree]->rotateTree); 204 goto insertCase4(context, &context->data[D_Traverse]->Traverse, &context->data[D_RotateTree]->rotateTree);
204 } 205 }
205 206
206 __code insertCase5(struct Context* context, struct Traverse* traverse,struct Stack *nodeStack) { 207 __code insertCase5(struct Context* context, struct Traverse* traverse,struct Stack *nodeStack) {
207 nodeStack->stack = (union Data*)traverse->nodeStack; 208 nodeStack->stack = (union Data*)traverse->nodeStack;
208 nodeStack->next = C_insertCase51; 209 nodeStack->next = C_insertCase51;
209 goto meta(context, traverse->nodeStack->pop2); 210 goto meta(context, traverse->nodeStack->pop2);
210 } 211 }
211 212
212 __code insertCase5_stub(struct Context* context) { 213 __code insertCase5_stub(struct Context* context) {
213 goto insertCase5(context, &context->data[D_Traverse]->traverse, &context->data[D_Stack]->stack); 214 goto insertCase5(context, &context->data[D_Traverse]->Traverse, &context->data[D_Stack]->stack);
214 } 215 }
215 216
216 __code insertCase51(struct Context* context, struct Traverse* traverse, struct RotateTree *rotateTree, struct Node* current, struct Node* parent, struct Node* grandparent) { 217 __code insertCase51(struct Context* context, struct Traverse* traverse, struct RotateTree *rotateTree, struct Node* current, struct Node* parent, struct Node* grandparent) {
217 traverse->parent = parent; 218 traverse->parent = parent;
218 traverse->grandparent = grandparent; 219 traverse->grandparent = grandparent;
232 } 233 }
233 234
234 __code insertCase51_stub(struct Context* context) { 235 __code insertCase51_stub(struct Context* context) {
235 struct Node* parent = &context->data[D_Stack]->stack.data->node; 236 struct Node* parent = &context->data[D_Stack]->stack.data->node;
236 struct Node* grandparent = &context->data[D_Stack]->stack.data1->node; 237 struct Node* grandparent = &context->data[D_Stack]->stack.data1->node;
237 goto insertCase51(context, &context->data[D_Traverse]->traverse,&context->data[D_RotateTree]->rotateTree, context->data[D_Traverse]->traverse.current, parent, grandparent); 238 goto insertCase51(context, &context->data[D_Traverse]->Traverse,&context->data[D_RotateTree]->rotateTree, context->data[D_Traverse]->Traverse.current, parent, grandparent);
238 } 239 }
239 240
240 __code rotateLeft(struct Context* context, struct Traverse* traverse,struct Stack* nodeStack) { 241 __code rotateLeft(struct Context* context, struct Traverse* traverse,struct Stack* nodeStack) {
241 nodeStack->stack = (union Data*)traverse->nodeStack; 242 nodeStack->stack = (union Data*)traverse->nodeStack;
242 nodeStack->next = C_rotateLeft1; 243 nodeStack->next = C_rotateLeft1;
325 nodeStack->next = context->next; 326 nodeStack->next = context->next;
326 goto meta(context, traverse->nodeStack->clear); 327 goto meta(context, traverse->nodeStack->clear);
327 } 328 }
328 329
329 __code stackClear_stub(struct Context* context) { 330 __code stackClear_stub(struct Context* context) {
330 goto stackClear(context, &context->data[D_Traverse]->traverse,&context->data[D_Stack]->stack); 331 goto stackClear(context, &context->data[D_Traverse]->Traverse,&context->data[D_Stack]->stack);
331 } 332 }
332 333
333 334
334 __code get(struct Context* context, struct Tree* tree, struct Traverse* traverse) { 335 __code get(struct Context* context, struct Tree* tree, struct Traverse* traverse) {
335 if (tree->root) { 336 if (tree->root) {
340 341
341 goto meta(context, traverse->next); 342 goto meta(context, traverse->next);
342 } 343 }
343 344
344 __code get_stub(struct Context* context) { 345 __code get_stub(struct Context* context) {
345 goto get(context, &context->data[D_Tree]->tree, &context->data[D_Traverse]->traverse); 346 goto get(context, &context->data[D_Tree]->tree, &context->data[D_Traverse]->Traverse);
346 } 347 }
347 348
348 __code search(struct Context* context, struct Traverse* traverse, struct Node* node) { 349 __code search(struct Context* context, struct Traverse* traverse, struct Node* node) {
349 // compare(context, traverse, traverse->current->key, node->key); 350 // compare(context, traverse, traverse->current->key, node->key);
350 traverse->result = compare(traverse->current, node); 351 traverse->result = compare(traverse->current, node);
363 364
364 goto meta(context, traverse->next); 365 goto meta(context, traverse->next);
365 } 366 }
366 367
367 __code search_stub(struct Context* context) { 368 __code search_stub(struct Context* context) {
368 goto search(context, &context->data[D_Traverse]->traverse, &context->data[D_Node]->node); 369 goto search(context, &context->data[D_Traverse]->Traverse, &context->data[D_Node]->node);
369 } 370 }
370 371
371 /* /\* __code delete(struct Context* context, struct Tree* tree) { *\/ */ 372 /* /\* __code delete(struct Context* context, struct Tree* tree) { *\/ */
372 /* /\* if (tree->root) { *\/ */ 373 /* /\* if (tree->root) { *\/ */
373 /* /\* stack_push(context->code_stack, &context->next); *\/ */ 374 /* /\* stack_push(context->code_stack, &context->next); *\/ */