view paper/src/rotate.c @ 16:958634b9fa32

make paper directory
author Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
date Wed, 17 Feb 2016 16:59:46 +0900
parents src/rotate.c@2d6755608f67
children
line wrap: on
line source

// Code Gear
__code rotateLeft(struct Context* context, struct Node* node, struct Tree* tree, struct Traverse* traverse) {
    struct Node* tmp = node->right;
    struct Node* parent = 0;
    
    stack_pop(context->node_stack, &parent);

    if (parent) {
        if (node == parent->left)
            parent->left = tmp;
        else
            parent->right = tmp;
    } else {
        tree->root = tmp;
    }

    stack_push(context->node_stack, &parent);
    
    node->right = tmp->left;
    tmp->left = node;
    traverse->current = tmp;
    
    stack_pop(context->code_stack, &context->next);
    goto meta(context, context->next);
}
    
// Meta Code Gear(stub)
__code rotateLeft_stub(struct Context* context) {
    goto rotateLeft(context,
                    context->data[Traverse]->traverse.current,
                    &context->data[Tree]->tree,
                    &context->data[Traverse]->traverse);
}