changeset 47:348148d8fdb1

implement get
author Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
date Tue, 19 May 2015 17:46:41 +0900
parents a0a58875c93f
children 3214ac1f9e8d
files src/llrb/llrb.c src/llrb/llrbContext.c src/llrb/llrbContext.h
diffstat 3 files changed, 48 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- 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);
 }
 
--- 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;
--- 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;