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