comparison final_main/chapter3.tex @ 8:b35c8fcff7d5

update
author mir3636
date Wed, 15 Feb 2017 11:06:39 +0900
parents 10c4d21cc7f4
children 11ad5b3e7b85
comparison
equal deleted inserted replaced
7:10c4d21cc7f4 8:b35c8fcff7d5
74 stack->clear = C_clearSingleLinkedStack; 74 stack->clear = C_clearSingleLinkedStack;
75 return stack; 75 return stack;
76 } 76 }
77 \end{lstlisting} 77 \end{lstlisting}
78 78
79 \section{Gearef、GearImpl}
80 Context には Allocation 等で生成した Data Gear へのポインタが格納されている。
81 Code Gear が Context にアクセスする際、ポインタを使用してデータを取り出すためコードが煩雑になってしまう(リスト\ref{ref})。
82 そこで Code Gear がデータを参照するための Gearef というマクロを定義した。
83 Gearef に Context と型を渡すことでデータの参照が行える。
84 また impliment を参照する際も、ポインタでの記述が複雑になってしまうため 同様に GearImpl を定義した。
85 Gearef と GearImpl を用いたコードがリスト\ref{Gearef}である。
86
87 \begin{lstlisting}[frame=lrbt,label=ref,caption={Gearef、GearImplのないコード}]
88 __code pushSingleLinkedStack_stub(struct Context* context) {
89 SingleLinkedStack* stack = (SingleLinkedStack*)context->data[D_Stack]->Stack.stack->Stack.stack;
90 Data* data = Gearef(context, Stack)->data;
91 Data* data = context->data[D_Stack]->Stack.data;
92 enum Code next = context->data[D_Stack]->Stack.next;
93 goto pushSingleLinkedStack(context, stack, data, next);
94 }
95 \end{lstlisting}
96
97 \begin{lstlisting}[frame=lrbt,label=Gearef,caption={Gearef、GearImplを使ったコード}]
98 __code pushSingleLinkedStack_stub(struct Context* context) {
99 SingleLinkedStack* stack = (SingleLinkedStack*)GearImpl(context, Stack, stack);
100 Data* data = Gearef(context, Stack)->data;
101 enum Code next = Gearef(context, Stack)->next;
102 goto pushSingleLinkedStack(context, stack, data, next);
103 }
104 \end{lstlisting}
105
79 106
80 \section{stub Code Gear} 107 \section{stub Code Gear}
81 Code Gear が必要とする Data Gear を取り出す際に Context を通す必要がある。 108 Code Gear が必要とする Data Gear を取り出す際に Context を通す必要がある。
82 しかし、Context を直接扱うのはセキュリティ上好ましくない。 109 しかし、Context を直接扱うのはセキュリティ上好ましくない。
83 そこで Context から必要なデータを取り出して Code Gear に接続する stub Code Gear を定義し、これを介して間接的に必要な Data Gear にアクセスする。 110 そこで Context から必要なデータを取り出して Code Gear に接続する stub Code Gear を定義し、これを介して間接的に必要な Data Gear にアクセスする。