Mercurial > hg > Members > Moririn
view src/parallel_execution/stack.c @ 217:c34e6aa10967
Fix DataGear access name
author | Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 09 Jan 2017 01:18:13 +0900 |
parents | 119c035e0e36 |
children | ebc13549394c |
line wrap: on
line source
#include "context.h" #include "stack.h" #include "origin_cs.h" #include <stdio.h> union Data* createSingleLinkedStack(struct Context* context) { struct Stack* stack = &ALLOCATE(context, Stack)->Stack; struct SingleLinkedStack* singleLinkedStack = &ALLOCATE(context, SingleLinkedStack)->SingleLinkedStack; stack->stack = (union Data*)singleLinkedStack; singleLinkedStack->top = NULL; stack->push = C_pushSingleLinkedStack; stack->pop = C_popSingleLinkedStack; stack->pop2 = C_pop2SingleLinkedStack; stack->get = C_getSingleLinkedStack; stack->get2 = C_get2SingleLinkedStack; stack->isEmpty = C_isEmptySingleLinkedStack; stack->clear = C_clearSingleLinkedStack; return (union Data*)(stack); } void printStack1(union Data* data) { struct Node* node = &data->Element.data->Node; if (node == NULL) { printf("NULL"); } else { printf("key = %d ,", node->key); printStack1((union Data*)data->Element.next); } } void printStack(union Data* data) { printStack1(data); printf("\n"); } __code clearSingleLinkedStack(struct Context* context, struct SingleLinkedStack* stack,enum Code next) { stack->top = NULL; goto meta(context, next); } __code clearSingleLinkedStack_stub(struct Context* context) { goto clearSingleLinkedStack(context, (struct SingleLinkedStack *)context->data[D_Stack]->Stack.stack->Stack.stack, context->data[D_Stack]->Stack.next); } __code pushSingleLinkedStack(struct Context* context, struct SingleLinkedStack* stack, struct Element* element, union Data* data, enum Code next) { element->next = stack->top; element->data = data; stack->top = element; goto meta(context, next); } __code pushSingleLinkedStack_stub(struct Context* context) { struct Element* element = &ALLOCATE(context, Element)->Element; goto pushSingleLinkedStack(context, (struct SingleLinkedStack *)context->data[D_Stack]->Stack.stack->Stack.stack, element, context->data[D_Stack]->Stack.data, context->data[D_Stack]->Stack.next); } __code popSingleLinkedStack(struct Context* context, struct SingleLinkedStack* stack, union Data** data, enum Code next) { if (stack->top) { *data = stack->top->data; stack->top = stack->top->next; } else { *data = NULL; } goto meta(context, next); } __code popSingleLinkedStack_stub(struct Context* context) { goto popSingleLinkedStack(context, (struct SingleLinkedStack *)context->data[D_Stack]->Stack.stack->Stack.stack, &context->data[D_Stack]->Stack.data, context->data[D_Stack]->Stack.next); } __code pop2SingleLinkedStack(struct Context* context, struct SingleLinkedStack* stack, union Data** data, union Data** data1, enum Code next) { if (stack->top) { *data = stack->top->data; stack->top = stack->top->next; } else { *data = NULL; } if (stack->top) { *data1 = stack->top->data; stack->top = stack->top->next; } else { *data1 = NULL; } goto meta(context, next); } __code pop2SingleLinkedStack_stub(struct Context* context) { goto pop2SingleLinkedStack(context, (struct SingleLinkedStack *)context->data[D_Stack]->Stack.stack->Stack.stack, &context->data[D_Stack]->Stack.data, &context->data[D_Stack]->Stack.data1, context->data[D_Stack]->Stack.next); } __code getSingleLinkedStack(struct Context* context, struct SingleLinkedStack* stack, union Data** data, enum Code next) { if (stack->top) *data = stack->top->data; else *data = NULL; goto meta(context, next); } __code getSingleLinkedStack_stub(struct Context* context) { goto getSingleLinkedStack(context, (struct SingleLinkedStack *)context->data[D_Stack]->Stack.stack->Stack.stack, &context->data[D_Stack]->Stack.data, context->data[D_Stack]->Stack.next); } __code get2SingleLinkedStack(struct Context* context, struct SingleLinkedStack* stack, union Data** data, union Data** data1, enum Code next) { if (stack->top) { *data = stack->top->data; if (stack->top->next) { *data1 = stack->top->next->data; } else { *data1 = NULL; } } else { *data = NULL; *data1 = NULL; } goto meta(context, next); } __code get2SingleLinkedStack_stub(struct Context* context) { goto get2SingleLinkedStack(context, (struct SingleLinkedStack *)context->data[D_Stack]->Stack.stack->Stack.stack, &context->data[D_Stack]->Stack.data, &context->data[D_Stack]->Stack.data1, context->data[D_Stack]->Stack.next); } __code isEmptySingleLinkedStack(struct Context* context, struct SingleLinkedStack* stack, enum Code next,enum Code whenEmpty) { if (stack->top) goto meta(context, next); else goto meta(context, whenEmpty); } __code isEmptySingleLinkedStack_stub(struct Context* context) { goto isEmptySingleLinkedStack(context, (struct SingleLinkedStack *)context->data[D_Stack]->Stack.stack->Stack.stack, context->data[D_Stack]->Stack.next, context->data[D_Stack]->Stack.whenEmpty); }