# HG changeset patch # User Yasutaka Higa # Date 1458116390 -32400 # Node ID b13d2c8d4b47eee016fb82002294052aaa53d623 # Parent 48bcaf3f90ef84270b7e34b4a97d0bb30e1af3cc Fix iterator diff -r 48bcaf3f90ef -r b13d2c8d4b47 src/insert_verification/akashaLLRBContext.c --- a/src/insert_verification/akashaLLRBContext.c Tue Mar 15 16:59:59 2016 +0900 +++ b/src/insert_verification/akashaLLRBContext.c Wed Mar 16 17:19:50 2016 +0900 @@ -4,6 +4,7 @@ extern __code insertOnce_stub(struct Context*); extern __code showTree_stub(struct Context*); +extern __code iterateInsertion_stub(struct Context*); /* definitions from llrb */ extern __code meta(struct Context*, enum Code next); @@ -52,8 +53,9 @@ context->codeNum = Exit; - context->code[InsertOnce] = insertOnce_stub; - context->code[ShowTree] = showTree_stub; + context->code[InsertOnce] = insertOnce_stub; + context->code[ShowTree] = showTree_stub; + context->code[IterateInsertion] = iterateInsertion_stub; /* definitions from llrb */ context->code[Put] = put_stub; @@ -85,7 +87,7 @@ context->data[Iter] = context->heap; context->heap += sizeof(struct Iterator); - context->dataNum = Node; + context->dataNum = Iter; struct Tree* tree = &context->data[Tree]->tree; tree->root = 0; @@ -101,10 +103,11 @@ __code initIterator(struct Context* context) { struct IterElem* ie = (struct IterElem*)malloc(sizeof(struct IterElem)); - struct Iterator* iter = &context->data[Iter]; + struct Iterator* iter = &context->data[Iter]->iterator; ie->val = 0; ie->next = NULL; + iter->tree = NULL; iter->head = ie; goto initIteratorElem(context, ie); @@ -120,7 +123,7 @@ } __code initFinishIterator(struct Context* context, struct IterElem* elem) { - struct Iterator* iter = &context->data[Iter]; + struct Iterator* iter = &context->data[Iter]->iterator; elem->next = iter->head; iter->last = iter->head; goto meta(context, context->next); diff -r 48bcaf3f90ef -r b13d2c8d4b47 src/insert_verification/include/akashaLLRBContext.h --- a/src/insert_verification/include/akashaLLRBContext.h Tue Mar 15 16:59:59 2016 +0900 +++ b/src/insert_verification/include/akashaLLRBContext.h Wed Mar 16 17:19:50 2016 +0900 @@ -2,11 +2,12 @@ #include "stack.h" #define ALLOCATE_SIZE 1000 -#define LIMIT_OF_VERIFICATION_SIZE 4 +#define LIMIT_OF_VERIFICATION_SIZE 16 enum Code { InsertOnce, ShowTree, + IterateInsertion, /* definitions from llrb */ Allocator, diff -r 48bcaf3f90ef -r b13d2c8d4b47 src/insert_verification/main.c --- a/src/insert_verification/main.c Tue Mar 15 16:59:59 2016 +0900 +++ b/src/insert_verification/main.c Wed Mar 16 17:19:50 2016 +0900 @@ -36,6 +36,25 @@ goto meta(context, Exit); } +__code verifySpecification(struct Context* context) { +} + +__code iterateInsertion_stub(struct Context* context) { + goto iterateInsertion(context, &context->data[Iter]->iterator, &context->data[Node]->node); +} + +__code iterateInsertion(struct Context* context, struct Iterator* iter, struct Node* node) { + node->key = iter->head->val; + node->value = iter->head->val; + iter->head = iter->head->next; + if (iter->head == iter->last) { goto meta(context, ShowTree); } + + //printf("Trying insertion %d", node->key); + + context->next = IterateInsertion; + goto meta(context, Put); +} + int main(int argc, char const* argv[]) { - goto startCode(InsertOnce); + goto startCode(IterateInsertion); }