view paper/src/enqueue.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/enqueue.c@a8c53472e1a3
children
line wrap: on
line source

// allocate Element
__code putQueue1(struct Context* context, struct Allocate* allocate) {
    allocate->size = sizeof(struct Element);
    allocator(context);

    goto meta(context, PutQueue2);
}

// Meta Code Gear(stub)
__code putQueue1_stub(struct Context* context) {
    goto putQueue1(context, &context->data[Allocate]->allocate);
}

// write Element infomation
__code putQueue2(struct Context* context, struct Element* new_element, struct Element* element, struct Queue* queue) {
    new_element->task = element->task;

    if (queue->first)
        goto meta(context, PutQueue3);
    else
        goto meta(context, PutQueue4);
}

// Meta Code Gear(stub)
__code putQueue2_stub(struct Context* context) {
    goto putQueue2(context,
                   &context->data[context->dataNum]->element,
                   &context->data[Element]->element,
                   &context->data[ActiveQueue]->queue);
}

// Enqueue(normal)
__code putQueue3(struct Context* context, struct Queue* queue, struct Element* new_element) {
    struct Element* last = queue->last;
    last->next = new_element;

    queue->last = new_element;
    queue->count++;
        
    goto meta(context, context->next);
}

// Meta Code Gear(stub)
__code putQueue3_stub(struct Context* context) {
    goto putQueue3(context,
                   &context->data[ActiveQueue]->queue,
                   &context->data[context->dataNum]->element);
}

// Enqueue(nothing element)
__code putQueue4(struct Context* context, struct Queue* queue, struct Element* new_element) {
    queue->first = new_element;
    queue->last = new_element;
    queue->count++;
        
    goto meta(context, context->next);
}

// Meta Code Gear(stub)
__code putQueue4_stub(struct Context* context) {
    goto putQueue4(context,
                   &context->data[ActiveQueue]->queue,
                   &context->data[context->dataNum]->element);
}