Mercurial > hg > Gears > GearsAgda
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); *\/ */ |