# HG changeset patch # User Shohei KOKUBO # Date 1432025201 -32400 # Node ID 348148d8fdb194e8dc33dc98d25d5f6bce146d96 # Parent a0a58875c93f63ff5eabee0182cb493fa1d4594c implement get diff -r a0a58875c93f -r 348148d8fdb1 src/llrb/llrb.c --- a/src/llrb/llrb.c Tue May 19 06:08:38 2015 +0900 +++ b/src/llrb/llrb.c Tue May 19 17:46:41 2015 +0900 @@ -223,6 +223,33 @@ goto meta(context, RotateL); } +__code get(struct Context* context) { + context->data[Tree]->tree.current = context->data[Tree]->tree.root; + context->data[Next]->next = context->data[Allocate]->allocate.next; + context->data[Allocate]->allocate.next = Traverse; + + goto meta(context, Compare); +} + +__code traverse(struct Context* context) { + int result = context->data[Tree]->tree.result; + struct Tree* tree = &context->data[Tree]->tree; + + if (result == 0) { + goto meta(context, context->data[Next]->next); + } else if (result == 1) { + tree->current = tree->current->right; + } else { + tree->current = tree->current->left; + } + + if(tree->current == 0) { + goto meta(context, context->data[Next]->next); + } + + goto meta(context, Compare); +} + /* __code code2(Allocate allocate, Count count) { count.count = 0; @@ -255,7 +282,8 @@ } __code code4(struct Context* context) { - pre = context->data[Tree]->tree.root; + puts("---before---"); + print_tree(context->data[Tree]->tree.root, 0); struct Allocate* allocate = &context->data[Allocate]->allocate; allocate->size = sizeof(struct Node); @@ -269,13 +297,21 @@ } __code code5(struct Context* context) { - puts("---before---"); - print_tree(pre, 0); puts("---after---"); print_tree(context->data[Tree]->tree.root, 0); puts("--Number of Data--"); printf("%d\n", context->dataNum); stack_free(pstack); + + context->data[Allocate]->allocate.next = Code6; + context->data[Node]->node.key = 2; + + goto meta(context, Get); +} + +__code code6(struct Context* context) { + puts("---get---"); + print_tree(context->data[Tree]->tree.current, 0); goto meta(context, Exit); } diff -r a0a58875c93f -r 348148d8fdb1 src/llrb/llrbContext.c --- a/src/llrb/llrbContext.c Tue May 19 06:08:38 2015 +0900 +++ b/src/llrb/llrbContext.c Tue May 19 17:46:41 2015 +0900 @@ -7,6 +7,7 @@ extern __code code3(struct Context*); extern __code code4(struct Context*); extern __code code5(struct Context*); +extern __code code6(struct Context*); extern __code meta(struct Context*); extern __code allocate(struct Context*); extern __code put(struct Context*); @@ -19,6 +20,8 @@ extern __code colorFlip(struct Context*); extern __code fixUp(struct Context*); extern __code changeReference(struct Context*); +extern __code get(struct Context*); +extern __code traverse(struct Context*); extern __code exit_code(struct Context*); __code initLLRBContext(struct Context* context) { @@ -33,6 +36,7 @@ context->code[Code3] = code3; context->code[Code4] = code4; context->code[Code5] = code5; + context->code[Code6] = code6; context->code[Allocator] = allocate; context->code[Put] = put; context->code[Replace] = replaceNode; @@ -44,6 +48,8 @@ context->code[ColorFlip] = colorFlip; context->code[FixUp] = fixUp; context->code[ChangeRef] = changeReference; + context->code[Get] = get; + context->code[Traverse] = traverse; context->code[Exit] = exit_code; context->heap = context->heap_start; diff -r a0a58875c93f -r 348148d8fdb1 src/llrb/llrbContext.h --- a/src/llrb/llrbContext.h Tue May 19 06:08:38 2015 +0900 +++ b/src/llrb/llrbContext.h Tue May 19 17:46:41 2015 +0900 @@ -8,6 +8,7 @@ Code3, Code4, Code5, + Code6, Allocator, Put, Replace, @@ -19,6 +20,8 @@ ColorFlip, FixUp, ChangeRef, + Get, + Traverse, Exit, }; @@ -34,8 +37,6 @@ __code (**code) (struct Context *); void* heap_start; void* heap; - union Data* root; - union Data* current; long dataSize; int dataNum; union Data **data;