Mercurial > hg > Papers > 2018 > nozomi-master
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} |