diff final_main/chapter3.tex @ 8:b35c8fcff7d5

update
author mir3636
date Wed, 15 Feb 2017 11:06:39 +0900
parents 10c4d21cc7f4
children 11ad5b3e7b85
line wrap: on
line diff
--- a/final_main/chapter3.tex	Tue Feb 14 22:02:53 2017 +0900
+++ b/final_main/chapter3.tex	Wed Feb 15 11:06:39 2017 +0900
@@ -76,6 +76,33 @@
 }
 \end{lstlisting}
 
+\section{Gearef、GearImpl}
+Context には Allocation 等で生成した Data Gear へのポインタが格納されている。
+Code Gear が Context にアクセスする際、ポインタを使用してデータを取り出すためコードが煩雑になってしまう(リスト\ref{ref})。
+そこで Code Gear がデータを参照するための Gearef というマクロを定義した。
+Gearef に Context と型を渡すことでデータの参照が行える。
+また impliment を参照する際も、ポインタでの記述が複雑になってしまうため 同様に GearImpl を定義した。
+Gearef と GearImpl を用いたコードがリスト\ref{Gearef}である。
+
+\begin{lstlisting}[frame=lrbt,label=ref,caption={Gearef、GearImplのないコード}]
+__code pushSingleLinkedStack_stub(struct Context* context) {
+    SingleLinkedStack* stack = (SingleLinkedStack*)context->data[D_Stack]->Stack.stack->Stack.stack;
+    Data* data = Gearef(context, Stack)->data;
+    Data* data = context->data[D_Stack]->Stack.data;
+    enum Code next = context->data[D_Stack]->Stack.next;
+    goto pushSingleLinkedStack(context, stack, data, next);
+}
+\end{lstlisting}
+
+\begin{lstlisting}[frame=lrbt,label=Gearef,caption={Gearef、GearImplを使ったコード}]
+__code pushSingleLinkedStack_stub(struct Context* context) {
+    SingleLinkedStack* stack = (SingleLinkedStack*)GearImpl(context, Stack, stack);
+    Data* data = Gearef(context, Stack)->data;
+    enum Code next = Gearef(context, Stack)->next;
+    goto pushSingleLinkedStack(context, stack, data, next);
+}
+\end{lstlisting}
+
 
 \section{stub Code Gear}
 Code Gear が必要とする Data Gear を取り出す際に Context を通す必要がある。