Mercurial > hg > Papers > 2017 > mitsuki-thesis
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 にアクセスする。 |