comparison src/parallel_execution/stack.c @ 195:119c035e0e36

replace Array and Stack for array and stack
author ikkun
date Fri, 16 Dec 2016 23:27:14 +0900
parents 473b7d990a1f
children c34e6aa10967
comparison
equal deleted inserted replaced
194:081607dcf893 195:119c035e0e36
2 #include "stack.h" 2 #include "stack.h"
3 #include "origin_cs.h" 3 #include "origin_cs.h"
4 #include <stdio.h> 4 #include <stdio.h>
5 5
6 union Data* createSingleLinkedStack(struct Context* context) { 6 union Data* createSingleLinkedStack(struct Context* context) {
7 struct Stack* stack = &ALLOCATE(context, Stack)->stack; 7 struct Stack* stack = &ALLOCATE(context, Stack)->Stack;
8 struct SingleLinkedStack* singleLinkedStack = &ALLOCATE(context, SingleLinkedStack)->singleLinkedStack; 8 struct SingleLinkedStack* singleLinkedStack = &ALLOCATE(context, SingleLinkedStack)->SingleLinkedStack;
9 stack->stack = (union Data*)singleLinkedStack; 9 stack->stack = (union Data*)singleLinkedStack;
10 singleLinkedStack->top = NULL; 10 singleLinkedStack->top = NULL;
11 stack->push = C_pushSingleLinkedStack; 11 stack->push = C_pushSingleLinkedStack;
12 stack->pop = C_popSingleLinkedStack; 12 stack->pop = C_popSingleLinkedStack;
13 stack->pop2 = C_pop2SingleLinkedStack; 13 stack->pop2 = C_pop2SingleLinkedStack;
17 stack->clear = C_clearSingleLinkedStack; 17 stack->clear = C_clearSingleLinkedStack;
18 return (union Data*)(stack); 18 return (union Data*)(stack);
19 } 19 }
20 20
21 void printStack1(union Data* data) { 21 void printStack1(union Data* data) {
22 struct Node* node = &data->element.data->node; 22 struct Node* node = &data->Element.data->node;
23 if (node == NULL) { 23 if (node == NULL) {
24 printf("NULL"); 24 printf("NULL");
25 } else { 25 } else {
26 printf("key = %d ,", node->key); 26 printf("key = %d ,", node->key);
27 printStack1((union Data*)data->element.next); 27 printStack1((union Data*)data->Element.next);
28 } 28 }
29 } 29 }
30 30
31 void printStack(union Data* data) { 31 void printStack(union Data* data) {
32 printStack1(data); 32 printStack1(data);
37 stack->top = NULL; 37 stack->top = NULL;
38 goto meta(context, next); 38 goto meta(context, next);
39 } 39 }
40 40
41 __code clearSingleLinkedStack_stub(struct Context* context) { 41 __code clearSingleLinkedStack_stub(struct Context* context) {
42 goto clearSingleLinkedStack(context, (struct SingleLinkedStack *)context->data[D_Stack]->stack.stack->stack.stack, context->data[D_Stack]->stack.next); 42 goto clearSingleLinkedStack(context, (struct SingleLinkedStack *)context->data[D_Stack]->Stack.stack->Stack.stack, context->data[D_Stack]->Stack.next);
43 } 43 }
44 44
45 __code pushSingleLinkedStack(struct Context* context, struct SingleLinkedStack* stack, struct Element* element, union Data* data, enum Code next) { 45 __code pushSingleLinkedStack(struct Context* context, struct SingleLinkedStack* stack, struct Element* element, union Data* data, enum Code next) {
46 element->next = stack->top; 46 element->next = stack->top;
47 element->data = data; 47 element->data = data;
48 stack->top = element; 48 stack->top = element;
49 goto meta(context, next); 49 goto meta(context, next);
50 } 50 }
51 51
52 __code pushSingleLinkedStack_stub(struct Context* context) { 52 __code pushSingleLinkedStack_stub(struct Context* context) {
53 struct Element* element = &ALLOCATE(context, Element)->element; 53 struct Element* element = &ALLOCATE(context, Element)->Element;
54 goto pushSingleLinkedStack(context, 54 goto pushSingleLinkedStack(context,
55 (struct SingleLinkedStack *)context->data[D_Stack]->stack.stack->stack.stack, 55 (struct SingleLinkedStack *)context->data[D_Stack]->Stack.stack->Stack.stack,
56 element, 56 element,
57 context->data[D_Stack]->stack.data, 57 context->data[D_Stack]->Stack.data,
58 context->data[D_Stack]->stack.next); 58 context->data[D_Stack]->Stack.next);
59 } 59 }
60 60
61 __code popSingleLinkedStack(struct Context* context, struct SingleLinkedStack* stack, union Data** data, enum Code next) { 61 __code popSingleLinkedStack(struct Context* context, struct SingleLinkedStack* stack, union Data** data, enum Code next) {
62 if (stack->top) { 62 if (stack->top) {
63 *data = stack->top->data; 63 *data = stack->top->data;
68 goto meta(context, next); 68 goto meta(context, next);
69 } 69 }
70 70
71 __code popSingleLinkedStack_stub(struct Context* context) { 71 __code popSingleLinkedStack_stub(struct Context* context) {
72 goto popSingleLinkedStack(context, 72 goto popSingleLinkedStack(context,
73 (struct SingleLinkedStack *)context->data[D_Stack]->stack.stack->stack.stack, 73 (struct SingleLinkedStack *)context->data[D_Stack]->Stack.stack->Stack.stack,
74 &context->data[D_Stack]->stack.data, 74 &context->data[D_Stack]->Stack.data,
75 context->data[D_Stack]->stack.next); 75 context->data[D_Stack]->Stack.next);
76 } 76 }
77 77
78 __code pop2SingleLinkedStack(struct Context* context, struct SingleLinkedStack* stack, union Data** data, union Data** data1, enum Code next) { 78 __code pop2SingleLinkedStack(struct Context* context, struct SingleLinkedStack* stack, union Data** data, union Data** data1, enum Code next) {
79 if (stack->top) { 79 if (stack->top) {
80 *data = stack->top->data; 80 *data = stack->top->data;
91 goto meta(context, next); 91 goto meta(context, next);
92 } 92 }
93 93
94 __code pop2SingleLinkedStack_stub(struct Context* context) { 94 __code pop2SingleLinkedStack_stub(struct Context* context) {
95 goto pop2SingleLinkedStack(context, 95 goto pop2SingleLinkedStack(context,
96 (struct SingleLinkedStack *)context->data[D_Stack]->stack.stack->stack.stack, 96 (struct SingleLinkedStack *)context->data[D_Stack]->Stack.stack->Stack.stack,
97 &context->data[D_Stack]->stack.data, 97 &context->data[D_Stack]->Stack.data,
98 &context->data[D_Stack]->stack.data1, 98 &context->data[D_Stack]->Stack.data1,
99 context->data[D_Stack]->stack.next); 99 context->data[D_Stack]->Stack.next);
100 } 100 }
101 101
102 __code getSingleLinkedStack(struct Context* context, struct SingleLinkedStack* stack, union Data** data, enum Code next) { 102 __code getSingleLinkedStack(struct Context* context, struct SingleLinkedStack* stack, union Data** data, enum Code next) {
103 if (stack->top) 103 if (stack->top)
104 *data = stack->top->data; 104 *data = stack->top->data;
107 goto meta(context, next); 107 goto meta(context, next);
108 } 108 }
109 109
110 __code getSingleLinkedStack_stub(struct Context* context) { 110 __code getSingleLinkedStack_stub(struct Context* context) {
111 goto getSingleLinkedStack(context, 111 goto getSingleLinkedStack(context,
112 (struct SingleLinkedStack *)context->data[D_Stack]->stack.stack->stack.stack, 112 (struct SingleLinkedStack *)context->data[D_Stack]->Stack.stack->Stack.stack,
113 &context->data[D_Stack]->stack.data, 113 &context->data[D_Stack]->Stack.data,
114 context->data[D_Stack]->stack.next); 114 context->data[D_Stack]->Stack.next);
115 } 115 }
116 116
117 __code get2SingleLinkedStack(struct Context* context, struct SingleLinkedStack* stack, union Data** data, union Data** data1, enum Code next) { 117 __code get2SingleLinkedStack(struct Context* context, struct SingleLinkedStack* stack, union Data** data, union Data** data1, enum Code next) {
118 if (stack->top) { 118 if (stack->top) {
119 *data = stack->top->data; 119 *data = stack->top->data;
129 goto meta(context, next); 129 goto meta(context, next);
130 } 130 }
131 131
132 __code get2SingleLinkedStack_stub(struct Context* context) { 132 __code get2SingleLinkedStack_stub(struct Context* context) {
133 goto get2SingleLinkedStack(context, 133 goto get2SingleLinkedStack(context,
134 (struct SingleLinkedStack *)context->data[D_Stack]->stack.stack->stack.stack, 134 (struct SingleLinkedStack *)context->data[D_Stack]->Stack.stack->Stack.stack,
135 &context->data[D_Stack]->stack.data, 135 &context->data[D_Stack]->Stack.data,
136 &context->data[D_Stack]->stack.data1, 136 &context->data[D_Stack]->Stack.data1,
137 context->data[D_Stack]->stack.next); 137 context->data[D_Stack]->Stack.next);
138 } 138 }
139 139
140 __code isEmptySingleLinkedStack(struct Context* context, struct SingleLinkedStack* stack, enum Code next,enum Code whenEmpty) { 140 __code isEmptySingleLinkedStack(struct Context* context, struct SingleLinkedStack* stack, enum Code next,enum Code whenEmpty) {
141 if (stack->top) 141 if (stack->top)
142 goto meta(context, next); 142 goto meta(context, next);
144 goto meta(context, whenEmpty); 144 goto meta(context, whenEmpty);
145 } 145 }
146 146
147 __code isEmptySingleLinkedStack_stub(struct Context* context) { 147 __code isEmptySingleLinkedStack_stub(struct Context* context) {
148 goto isEmptySingleLinkedStack(context, 148 goto isEmptySingleLinkedStack(context,
149 (struct SingleLinkedStack *)context->data[D_Stack]->stack.stack->stack.stack, 149 (struct SingleLinkedStack *)context->data[D_Stack]->Stack.stack->Stack.stack,
150 context->data[D_Stack]->stack.next, 150 context->data[D_Stack]->Stack.next,
151 context->data[D_Stack]->stack.whenEmpty); 151 context->data[D_Stack]->Stack.whenEmpty);
152 } 152 }
153 153