comparison src/parallel_execution/rb_tree.c @ 127:fe1fbfec7d01

stack clear
author kono
date Thu, 29 Sep 2016 22:22:36 +0900
parents c7ac153f86dd
children 2bb5e4f0fd35
comparison
equal deleted inserted replaced
126:c7ac153f86dd 127:fe1fbfec7d01
108 &context->data[Traverse]->traverse.nodeStack->data->node, 108 &context->data[Traverse]->traverse.nodeStack->data->node,
109 newnewNode, 109 newnewNode,
110 context->data[Traverse]->traverse.result); 110 context->data[Traverse]->traverse.result);
111 } 111 }
112 112
113 __code insertNode(struct Context* context, struct Traverse* traverse, struct Tree* tree, struct Node* node, struct Node* newNode) { 113 __code insertNode(struct Context* context, struct Traverse* traverse, struct Node* node, struct Node* newNode) {
114 *newNode = *node; 114 *newNode = *node;
115 newNode->color = Red; 115 newNode->color = Red;
116 traverse->current = newNode; 116 traverse->current = newNode;
117 tree->root->color = Black;
118 goto meta(context, InsertCase1); 117 goto meta(context, InsertCase1);
119 } 118 }
120 119
121 __code insertNode_stub(struct Context* context) { 120 __code insertNode_stub(struct Context* context) {
122 goto insertNode(context, 121 goto insertNode(context,
123 &context->data[Traverse]->traverse, 122 &context->data[Traverse]->traverse,
124 &context->data[Tree]->tree,
125 &context->data[Node]->node, 123 &context->data[Node]->node,
126 context->data[Traverse]->traverse.newNode); 124 context->data[Traverse]->traverse.newNode);
127 } 125 }
128 126
129 __code insertCase1(struct Context* context, struct Element* nodeStack) { 127 __code insertCase1(struct Context* context, struct Tree* tree,struct Element* nodeStack) {
130 if (nodeStack!=NULL) { 128 if (nodeStack!=NULL) {
131 goto meta(context, InsertCase2); 129 goto meta(context, InsertCase2);
132 } 130 }
131 tree->root->color = Black;
133 goto meta(context, StackClear); 132 goto meta(context, StackClear);
134 } 133 }
135 134
136 __code insert1_stub(struct Context* context) { 135 __code insert1_stub(struct Context* context) {
137 goto insertCase1(context, context->data[Traverse]->traverse.nodeStack); 136 goto insertCase1(context,
137 &context->data[Tree]->tree,
138 context->data[Traverse]->traverse.nodeStack);
138 } 139 }
139 140
140 __code insertCase2(struct Context* context, struct Node* parent) { 141 __code insertCase2(struct Context* context, struct Node* parent) {
141 if (parent->color == Black) { 142 if (parent->color == Black) {
142 goto meta(context, StackClear); 143 goto meta(context, StackClear);
329 parent); 330 parent);
330 } 331 }
331 332
332 __code stackClear(struct Context* context, stack_ptr node_stack, struct Traverse* traverse) { 333 __code stackClear(struct Context* context, stack_ptr node_stack, struct Traverse* traverse) {
333 traverse->current = 0; 334 traverse->current = 0;
335 traverse->nodeStack = NULL;
334 336
335 goto meta(context, context->next); 337 goto meta(context, context->next);
336 } 338 }
337 339
338 __code stackClear_stub(struct Context* context) { 340 __code stackClear_stub(struct Context* context) {