Mercurial > hg > Members > Moririn
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 |