Mercurial > hg > GearsTemplate
view src/parallel_execution/stack.cbc @ 170:ee7134f3bef1
Fix
author | Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 22 Nov 2016 10:36:45 +0900 |
parents | 06cfc1289361 |
children |
line wrap: on
line source
#include "context.h" #include "stack.h" #include "origin_cs.h" #include <stdio.h> typedef struct SingleLinkedStack { struct Element* top; } SingleLinkedStack; Stack* createSingleLinkedStack() { struct Stack* stack = new Stack(); struct SingleLinkedStack* singleLinkedStack = new SingleLinkedStack(); stack->stack = singleLinkedStack; singleLinkedStack->top = NULL; stack->push = pushSingleLinkedStack; stack->pop = popSingleLinkedStack; stack->pop2 = pop2SingleLinkedStack; stack->get = getSingleLinkedStack; stack->get2 = get2SingleLinkedStack; stack->isEmpty = isEmptySingleLinkedStack; stack->clear = clearSingleLinkedStack; return 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 SingleLinkedStack* stack,__code next(...)) { stack->top = NULL; goto next(...); } __code pushSingleLinkedStack(struct SingleLinkedStack* stack,union Data* data, __code next(...)) { Element* element = new Element(); element->next = stack->top; element->data = data; stack->top = element; goto next(...); } __code popSingleLinkedStack(struct SingleLinkedStack* stack, __code next(..., union Data*)) { union Data* data; if (stack->top) { *data = stack->top->data; stack->top = stack->top->next; } else { *data = NULL; } goto next(..., data); } __code pop2SingleLinkedStack(struct SingleLinkedStack* stack, union Data** data, union Data** data1, __code next(..., union Data**, union Data**)) { 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 next(..., data, data1); } __code getSingleLinkedStack(struct SingleLinkedStack* stack, union Data** data, __code next(...)) { if (stack->top) *data = stack->top->data; else *data = NULL; goto next(...); } __code get2SingleLinkedStack(struct SingleLinkedStack* stack,..., __code next(...)) { union Data* data, *data1; 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 next(data, data1, ...); } __code isEmptySingleLinkedStack(struct SingleLinkedStack* stack, __code next(...), __code whenEmpty(...)) { if (stack->top) goto next(...); else goto whenEmpty(...); }