comparison src/llrb/llrb.c @ 75:97387904add9

refactoring
author Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
date Tue, 17 Nov 2015 15:53:51 +0900
parents 724b65b1cfaf
children 7ad6d1502a03
comparison
equal deleted inserted replaced
74:724b65b1cfaf 75:97387904add9
114 __code insertNode(struct Context* context, struct Tree* tree, struct Node* node, struct Node* newNode) { 114 __code insertNode(struct Context* context, struct Tree* tree, struct Node* node, struct Node* newNode) {
115 node->color = Red; 115 node->color = Red;
116 *newNode = *node; 116 *newNode = *node;
117 117
118 if (tree->root == 0) { 118 if (tree->root == 0) {
119 newNode->color = Black; 119 tree->current = newNode;
120 tree->root = newNode; 120 goto meta(context, SetRoot);
121 tree->current = 0; 121 }
122 122
123 stack_pop(context->code_stack, &context->next);
124 goto meta(context, context->next);
125 }
126
127 goto meta(context, Balance1); 123 goto meta(context, Balance1);
128 } 124 }
129 125
130 __code insertNode_stub(struct Context* context) { 126 __code insertNode_stub(struct Context* context) {
131 goto insertNode(context, &context->data[Tree]->tree, &context->data[Node]->node, &context->data[context->dataNum]->node); 127 goto insertNode(context, &context->data[Tree]->tree, &context->data[Node]->node, &context->data[context->dataNum]->node);
186 182
187 if (stack_pop(context->node_stack, &tree->current) == 0) { 183 if (stack_pop(context->node_stack, &tree->current) == 0) {
188 compare(context, tree, tree->current->key, node->key); 184 compare(context, tree, tree->current->key, node->key);
189 goto meta(context, ChangeRef); 185 goto meta(context, ChangeRef);
190 } 186 }
191 187
192 newNode->color = Black; 188 goto meta(context, SetRoot);
193 tree->root = newNode; 189 }
190
191 __code fixUp_stub(struct Context* context) {
192 goto fixUp(context, &context->data[Tree]->tree, &context->data[Node]->node, context->data[Tree]->tree.current);
193 }
194
195 __code setRoot(struct Context* context, struct Tree* tree, struct Node* node) {
196 tree->root = node;
197 tree->root->color = Black;
194 tree->current = 0; 198 tree->current = 0;
195 199
196 stack_pop(context->code_stack, &context->next); 200 stack_pop(context->code_stack, &context->next);
197 goto meta(context, context->next); 201 goto meta(context, context->next);
198 } 202 }
199 203
200 __code fixUp_stub(struct Context* context) { 204 __code setRoot_stub(struct Context* context) {
201 goto fixUp(context, &context->data[Tree]->tree, &context->data[Node]->node, context->data[Tree]->tree.current); 205 goto setRoot(context, &context->data[Tree]->tree, context->data[Tree]->tree.current);
202 } 206 }
203 207
204 __code changeReference(struct Context* context, struct Tree* tree, struct Node* node, int result) { 208 __code changeReference(struct Context* context, struct Tree* tree, struct Node* node, int result) {
205 if (result == 1) { 209 if (result == 1) {
206 node->right = tree->prev; 210 node->right = tree->prev;