comparison final_main/chapter3.tex @ 9:11ad5b3e7b85

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