comparison paper/akasha.tex @ 92:c407b7403548

Add figure
author atton <atton@cr.ie.u-ryukyu.ac.jp>
date Thu, 09 Feb 2017 18:52:09 +0900
parents 897fda8e39c5
children 2bc816f4af27
comparison
equal deleted inserted replaced
91:54cf3b3153fe 92:c407b7403548
156 156
157 まずは最も単純な検証として要素数を有限に固定し、その挿入順番を数え上げる。 157 まずは最も単純な検証として要素数を有限に固定し、その挿入順番を数え上げる。
158 最初に、検証の対象となる赤黒木と、検証に必要な DataSegment を含む Meta DataSegment を定義する(リスト\ref{src:akasha-context})。 158 最初に、検証の対象となる赤黒木と、検証に必要な DataSegment を含む Meta DataSegment を定義する(リスト\ref{src:akasha-context})。
159 これが akasha のレベルで利用する Meta DataSegment である。 159 これが akasha のレベルで利用する Meta DataSegment である。
160 赤黒木自体はユーザから見るとメタレベル計算であるが、今回はその実装の検証するため、赤黒木がノーマルレベルとなる。 160 赤黒木自体はユーザから見るとメタレベル計算であるが、今回はその実装の検証するため、赤黒木がノーマルレベルとなる。
161 よって akasha はメタメタレベルの計算とも考えられる。 161 よって akasha はメタメタレベルの計算とも考えられる(図~\ref{fig:metameta})。
162 162
163 % TODO: meta meta の図 163 \begin{figure}[htbp]
164 \begin{center}
165 \includegraphics[width=250pt]{fig/metameta.pdf}
166 \caption{akasha とメタの階層構造}
167 \label{fig:metameta}
168 \end{center}
169 \end{figure}
164 170
165 akasha が使う DataSegment は データの挿入順を数え上げるためには使う環状リスト \verb/Iterator/ とその要素 \verb/IterElem/、検証に使う情報を保持する \verb/AkashaInfo/、木をなぞる際に使う \verb/AkashaNode/ がある。 171 akasha が使う DataSegment は データの挿入順を数え上げるためには使う環状リスト \verb/Iterator/ とその要素 \verb/IterElem/、検証に使う情報を保持する \verb/AkashaInfo/、木をなぞる際に使う \verb/AkashaNode/ がある。
166 172
167 \lstinputlisting[label=src:akasha-context, caption=検証を行なうための Meta DataSegment] {src/akashaContext.h} 173 \lstinputlisting[label=src:akasha-context, caption=検証を行なうための Meta DataSegment] {src/akashaContext.h}
168 174
181 187
182 \lstinputlisting[label=src:get-min-height, caption=木の最も短かい経路の長さを確認する Meta CodeSegment] {src/getMinHeight.c} 188 \lstinputlisting[label=src:get-min-height, caption=木の最も短かい経路の長さを確認する Meta CodeSegment] {src/getMinHeight.c}
183 189
184 同様に最も高い高さを取得し、仕様であるリスト\ref{src:assert}の assert を挿入の度に実行する。 190 同様に最も高い高さを取得し、仕様であるリスト\ref{src:assert}の assert を挿入の度に実行する。
185 assert は CodeSegment の結合を行なうメタ計算である \verb/meta/ を上書きすることにより実現する。 191 assert は CodeSegment の結合を行なうメタ計算である \verb/meta/ を上書きすることにより実現する。
186 192 イメージとしては、挿入を行なう Meta CodeSegment を利用するプログラム(図~\ref{fig:put}) の途中に検証用のメタ計算を挟むことで実現できる(図~\ref{fig:akashaPut})。
187 % TODO: 図 193
194 \begin{figure}[htbp]
195 \begin{center}
196 \includegraphics[width=300pt]{fig/put.pdf}
197 \caption{put を利用するプログラム}
198 \label{fig:put}
199 \end{center}
200 \end{figure}
201
202 \begin{figure}[htbp]
203 \begin{center}
204 \includegraphics[width=300pt]{fig/akashaPut.pdf}
205 \caption{put を利用するプログラムのメタを上書きする}
206 \label{fig:akahsaPut}
207 \end{center}
208 \end{figure}
188 209
189 \verb/meta/ はリスト\ref{src:rbtree-insert-case-2}の \verb/insertCase2/ のように軽量継続を行なう際に CodeSegment 名と DataSegment を指定するものである。 210 \verb/meta/ はリスト\ref{src:rbtree-insert-case-2}の \verb/insertCase2/ のように軽量継続を行なう際に CodeSegment 名と DataSegment を指定するものである。
190 検証を行なわない通常の \verb/meta/ の実装は CodeSegment 名から対応する実体への軽量継続である(リスト\ref{src:meta})。 211 検証を行なわない通常の \verb/meta/ の実装は CodeSegment 名から対応する実体への軽量継続である(リスト\ref{src:meta})。
191 212
192 \lstinputlisting[label=src:meta, caption=通常の CodeSegment の軽量継続] {src/meta.c} 213 \lstinputlisting[label=src:meta, caption=通常の CodeSegment の軽量継続] {src/meta.c}