Mercurial > hg > Gears > GearsAgda
view src/parallel_execution/stack.c @ 132:7c309e1aea73
Code Gears stack api
author | one |
---|---|
date | Thu, 27 Oct 2016 18:54:11 +0900 |
parents | a4507906938c |
children | 568730b1239e |
line wrap: on
line source
#include "stack.h" #include "context.h" #include "origin_cs.h" union Data* createSingleLinkedStack(struct Context* context) { struct Stack* stack = ALLOCATE(context, Stack); struct SingleLinkedStack* singleLinkedStack = ALLOCATE(context, SignleLinkedStack); stack->stack = singleLinkedStack; singleLinkedStack->top = NULL; stack->push = PushSingleLinkedStack; stack->pop = PopSingleLinkedStack; stack->isEmpty = _; return GET_DATA(stack); } __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); goto pushSingleLinkedStack(context, (struct SignleLinkedStack *)context->data[Stack]->stack.stack, element, context->data[Stack]->stack.data, context->data[Stack]->stack.next); } __code popSingleLinkedStack(struct Context* context, struct SingleLinkedStack* stack, union Data** data, enum Code next) { *data = stack->top; stack->top = stack->top->next; goto meta(context, next); } __code popSingleLinkedStack_stub(struct Context* context) { goto popSingleLinkedStack(context, (struct SignleLinkedStack *)context->data[Stack]->stack.stack, &context->data[Stack]->stack.data, context->data[Stack]->stack.next); } __code isEmptySingleLinkedStack(struct Context* context, struct SingleLinkedStack* stack, union Data** data, enum Code next) { *data = stack->top; goto meta(context, next); } __code isEmptySingleLinkedStack_stub(struct Context* context) { goto isEmptySingleLinkedStack(context, (struct SignleLinkedStack *)context->data[Stack]->stack.stack, &context->data[Stack]->stack.data, context->data[Stack]->stack.next); }