view src/insert_verification/main.c @ 11:b13d2c8d4b47

Fix iterator
author Yasutaka Higa <e115763@ie.u-ryukyu.ac.jp>
date Wed, 16 Mar 2016 17:19:50 +0900
parents e864ede359cc
children f0a1f02e8493
line wrap: on
line source

#include <stdio.h>

#include "akashaLLRBContext.h"
#include "akashaCS.h"

void printTree(struct Node* node, int n) {
    if (node != 0) {
        printTree(node->left, n+1);
        for (int i=0;i<n;i++)
            printf("  ");
        printf("key=%d value=%d color=%s\t%p\n", node->key, node->value,/* n, */node->color==0? "R":"B", node);
        printTree(node->right, n+1);
    }
}

__code insertOnce_stub(struct Context* context) {
    goto insertOnce(context, &context->data[Node]->node);
}

__code insertOnce(struct Context* context, struct Node* node) {
    node->key   = rand()%100+1;
    node->value = 100;

    context->next = ShowTree;
    goto meta(context, Put);
}

__code showTree_stub(struct Context* context) {
    goto showTree(context, &context->data[Tree]->tree);
}

__code showTree(struct Context* context, struct Tree* tree) {
    printTree(tree->root, 0);
    puts("");

    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(IterateInsertion);
}