Mercurial > hg > Papers > 2017 > mitsuki-thesis
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 を通す必要がある。