comparison src/parallel_execution/rb_tree.c @ 135:9ae7ce6c83f5

Fix segmentation falt
author innparusu
date Thu, 29 Sep 2016 17:18:15 +0900
parents 36ac17d37be4
children c7ac153f86dd
comparison
equal deleted inserted replaced
134:36ac17d37be4 135:9ae7ce6c83f5
107 &context->data[Tree]->tree, 107 &context->data[Tree]->tree,
108 &context->data[Node]->node, 108 &context->data[Node]->node,
109 context->data[Traverse]->traverse.newNode); 109 context->data[Traverse]->traverse.newNode);
110 } 110 }
111 111
112 __code insertCase1(struct Context* context, struct Node* parent) { 112 __code insertCase1(struct Context* context, struct Element* nodeStack) {
113 if (parent!=NULL) { 113 if (nodeStack!=NULL) {
114 goto meta(context, InsertCase2); 114 goto meta(context, InsertCase2);
115 } 115 }
116 goto meta(context, StackClear); 116 goto meta(context, StackClear);
117 } 117 }
118 118
119 __code insert1_stub(struct Context* context) { 119 __code insert1_stub(struct Context* context) {
120 goto insertCase1(context, (struct Node*)context->data[Traverse]->traverse.nodeStack->data); 120 goto insertCase1(context, context->data[Traverse]->traverse.nodeStack);
121 } 121 }
122 122
123 __code insertCase2(struct Context* context, struct Node* parent) { 123 __code insertCase2(struct Context* context, struct Node* parent) {
124 if (parent->color == Black) { 124 if (parent->color == Black) {
125 goto meta(context, StackClear); 125 goto meta(context, StackClear);
279 struct Allocate* allocate = &context->data[Allocate]->allocate; 279 struct Allocate* allocate = &context->data[Allocate]->allocate;
280 allocate->size = sizeof(struct Element); 280 allocate->size = sizeof(struct Element);
281 allocator(context); 281 allocator(context);
282 struct Element* element = &context->data[context->dataNum]->element; 282 struct Element* element = &context->data[context->dataNum]->element;
283 goto rotateLeft(context, 283 goto rotateLeft(context,
284 &context->data[Node]->node, 284 context->data[Traverse]->traverse.current,
285 &context->data[Tree]->tree, 285 &context->data[Tree]->tree,
286 &context->data[Traverse]->traverse, 286 &context->data[Traverse]->traverse,
287 parent, 287 parent,
288 element); 288 element);
289 } 289 }
308 308
309 goto meta(context, traverse->rotateNext); 309 goto meta(context, traverse->rotateNext);
310 } 310 }
311 311
312 __code rotateRight_stub(struct Context* context) { 312 __code rotateRight_stub(struct Context* context) {
313 struct Traverse* traverse = &context->data[Traverse]->traverse;
314 struct Node* parent = (traverse->nodeStack)?(struct Node*)traverse->nodeStack->data:NULL;
315 traverse->nodeStack = traverse->nodeStack->next;
313 struct Allocate* allocate = &context->data[Allocate]->allocate; 316 struct Allocate* allocate = &context->data[Allocate]->allocate;
314 allocate->size = sizeof(struct Element); 317 allocate->size = sizeof(struct Element);
315 allocator(context); 318 allocator(context);
316 struct Element* element = &context->data[context->dataNum]->element; 319 struct Element* element = &context->data[context->dataNum]->element;
317 goto rotateRight(context, 320 goto rotateRight(context,
318 &context->data[Node]->node, 321 context->data[Traverse]->traverse.current,
319 &context->data[Tree]->tree, 322 &context->data[Tree]->tree,
320 &context->data[Traverse]->traverse, 323 &context->data[Traverse]->traverse,
321 context->data[Traverse]->traverse.current, 324 parent,
322 element); 325 element);
323 } 326 }
324 327
325 __code stackClear(struct Context* context, stack_ptr node_stack, struct Traverse* traverse) { 328 __code stackClear(struct Context* context, stack_ptr node_stack, struct Traverse* traverse) {
326 traverse->current = 0; 329 traverse->current = 0;