Mercurial > hg > Members > innparusu > Gears
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; |