comparison final_main/chapter5.tex @ 7:10c4d21cc7f4

update
author mir3636
date Tue, 14 Feb 2017 22:02:53 +0900
parents 5b368e14bb64
children b35c8fcff7d5
comparison
equal deleted inserted replaced
6:5b368e14bb64 7:10c4d21cc7f4
68 else 68 else
69 goto whenEmpty(...); 69 goto whenEmpty(...);
70 } 70 }
71 \end{lstlisting} 71 \end{lstlisting}
72 72
73 \begin{lstlisting}[frame=lrbt,label=stack_c,caption={\footnotesize SingleLinkedStack.c}] 73 \begin{lstlisting}[frame=lrbt,label=stack_c,caption={\footnotesize 生成される stub}]
74 #include "../context.h"
75
76 Stack* createSingleLinkedStack(struct Context* context) {
77 struct Stack* stack = &ALLOCATE(context, Stack)->Stack;
78 struct SingleLinkedStack* singleLinkedStack = &ALLOCATE(context, SingleLinkedStack)->SingleLinkedStack;
79 stack->stack = (union Data*)singleLinkedStack;
80 singleLinkedStack->top = NULL;
81 stack->push = C_pushSingleLinkedStack;
82 stack->pop = C_popSingleLinkedStack;
83 stack->pop2 = C_pop2SingleLinkedStack;
84 stack->get = C_getSingleLinkedStack;
85 stack->get2 = C_get2SingleLinkedStack;
86 stack->isEmpty = C_isEmptySingleLinkedStack;
87 stack->clear = C_clearSingleLinkedStack;
88 return stack;
89 }
90
91 __code clearSingleLinkedStack(struct Context *context,struct SingleLinkedStack* stack,enum Code next) { 74 __code clearSingleLinkedStack(struct Context *context,struct SingleLinkedStack* stack,enum Code next) {
92 stack->top = NULL; 75 stack->top = NULL;
93 goto meta(context, next); 76 goto meta(context, next);
94 } 77 }
95 78
96 __code clearSingleLinkedStack_stub(struct Context* context) { 79 __code clearSingleLinkedStack_stub(struct Context* context) {
97 SingleLinkedStack* stack = (SingleLinkedStack*)GearImpl(context, Stack, stack); 80 SingleLinkedStack* stack = (SingleLinkedStack*)GearImpl(context, Stack, stack);
98 enum Code next = Gearef(context, Stack)->next; 81 enum Code next = Gearef(context, Stack)->next;
99 goto clearSingleLinkedStack(context, stack, next); 82 goto clearSingleLinkedStack(context, stack, next);
100 } 83 }
101
102 __code pushSingleLinkedStack(struct Context *context,struct SingleLinkedStack* stack,union Data* data, enum Code next) {
103 Element* element = &ALLOCATE(context, Element)->Element;
104 element->next = stack->top;
105 element->data = data;
106 stack->top = element;
107 goto meta(context, next);
108 }
109
110 __code pushSingleLinkedStack_stub(struct Context* context) {
111 SingleLinkedStack* stack = (SingleLinkedStack*)GearImpl(context, Stack, stack);
112 Data* data = Gearef(context, Stack)->data;
113 enum Code next = Gearef(context, Stack)->next;
114 goto pushSingleLinkedStack(context, stack, data, next);
115 }
116
117 __code popSingleLinkedStack(struct Context *context,struct SingleLinkedStack* stack, enum Code next,union Data **O_data) {
118 Data* data;
119 if (stack->top) {
120 data = stack->top->data;
121 stack->top = stack->top->next;
122 } else {
123 data = NULL;
124 }
125 *O_data = data;
126 goto meta(context, next);
127 }
128
129 __code popSingleLinkedStack_stub(struct Context* context) {
130 SingleLinkedStack* stack = (SingleLinkedStack*)GearImpl(context, Stack, stack);
131 enum Code next = Gearef(context, Stack)->next;
132 Data** O_data = &Gearef(context, Stack)->data;
133 goto popSingleLinkedStack(context, stack, next, O_data);
134 }
135
136 __code getSingleLinkedStack(struct Context *context,struct SingleLinkedStack* stack, enum Code next,union Data **O_data) {
137 Data* data;
138 if (stack->top)
139 data = stack->top->data;
140 else
141 data = NULL;
142 *O_data = data;
143 goto meta(context, next);
144 }
145
146 __code getSingleLinkedStack_stub(struct Context* context) {
147 SingleLinkedStack* stack = (SingleLinkedStack*)GearImpl(context, Stack, stack);
148 enum Code next = Gearef(context, Stack)->next;
149 Data** O_data = &Gearef(context, Stack)->data;
150 goto getSingleLinkedStack(context, stack, next, O_data);
151 }
152
153 __code isEmptySingleLinkedStack(struct Context *context,struct SingleLinkedStack* stack, enum Code next, enum Code whenEmpty) {
154 if (stack->top)
155 goto meta(context, next);
156 else
157 goto meta(context, whenEmpty);
158 }
159
160
161 __code isEmptySingleLinkedStack_stub(struct Context* context) {
162 SingleLinkedStack* stack = (SingleLinkedStack*)GearImpl(context, Stack, stack);
163 enum Code next = Gearef(context, Stack)->next;
164 enum Code whenEmpty = Gearef(context, Stack)->whenEmpty;
165 goto isEmptySingleLinkedStack(context, stack, next, whenEmpty);
166 }
167
168 \end{lstlisting} 84 \end{lstlisting}
169 85
170 \section{Context の生成} 86 \section{Context の生成}
171 Context は Meta Data Gear に相当し、Code Gear や Data Gear を管理している。 87 Context は Meta Data Gear に相当し、Code Gear や Data Gear を管理している。
172 Data Gear を取得するために perl スクリプトは context の定義 (リスト\ref{context}) を読み宣言された Data Gear を取得する。 88 Data Gear を取得するために perl スクリプトは context の定義 (リスト\ref{context}) を読み宣言された Data Gear を取得する。