Mercurial > hg > Papers > 2017 > tatsuki-master
diff jungle.tex @ 26:4365c210d1cb
commit
author | tatsuki |
---|---|
date | Sun, 12 Feb 2017 01:51:51 +0900 |
parents | 8d1f5ab7b420 |
children |
line wrap: on
line diff
--- a/jungle.tex Sat Feb 11 19:04:30 2017 +0900 +++ b/jungle.tex Sun Feb 12 01:51:51 2017 +0900 @@ -70,44 +70,6 @@ 木の変更は非破壊的に行われ、木のルートを変更後の木に置き換えるAtomicOperationがトランザクションとなる。 木の変更はLogとして記録され、分散ノードあるいはディスクに格納される。 JungleのAPIは、Eitherを返すようになっており、Eitherの型をチェックすることにより成功と失敗がわかるようになっている。 -今回効率的な木の非破壊アップデートを可能にするために追加した機能である、 -Jungleの中で使用する非破壊赤黒木、Indexの差分アップデート、Differential Jungle Tree、Red Black Jungle Treeについて説明する。 - - -\section{NodePath} -Jungleでは、木のノードの位置を{\tt NodePath}クラスを使って表す。 -{\tt NodePath}クラスはルートノードからスタートし、対象のノードまでの経路を数字を用いて指し示す。また、ルートノードは例外として-1と表記される。 -{\tt NodePath}クラスを用いて{\tt< -1,1,2,3>}を表している際の例を図\ref{NodePath}に記す。 - -\begin{figure}[htpb] -\begin{center} -\includegraphics[scale=0.7]{figures/nodePath.pdf} -\caption{NodePath} -\label{NodePath} -\end{center} -\end{figure} - -\newpage -\section{Either} -Jungleは、失敗する可能性のある関数では返り値を{ \tt Either<A、B>}に包んで返す。 -AにはError、Bには処理に成功した際の返り値の型が入る。 -Eitherは、AかBどちらかの値しか持たない。 -以下にEitherクラスが提供しているAPI(表\ref{EitherAPI})を記す。 -\begin{table}[htb] -\begin{center} -\caption{Eitherに実装されているAPI} -\begin{tabular}{|p{15em}|p{24em}|} \hline -{\small{\tt boolean isA()}} & {\small EitherがAを持っているかどうかを調べる。持っている場合trueを返す。}\\ \hline -{\small{\tt boolean isB()}} & {\small EitherがBを持っているかどうかを調べる。持っている場合trueを返す。}\\ \hline -{\small{\tt A a()}} &{\small Aの値を取得する。}\\ \hline -{\small{\tt B b()}} &{\small Bの値を取得する。}\\ \hline -\end{tabular} -\label{EitherAPI} -\end{center} -\end{table} - -{\tt Either<A、B>} の使い方は、{\tt isA()}を用いて関数が{\tt Error}を返していないかを調べる。 -{\tt Error}でない場合は{\tt b()}で関数の返り値を取得する。 \section{木の生成} @@ -167,6 +129,29 @@ \end{center} \end{table} +\section{Either} +Jungleは、失敗する可能性のある関数では返り値を{ \tt Either<A、B>}に包んで返す。 +AにはError、Bには処理に成功した際の返り値の型が入る。 +Eitherは、AかBどちらかの値しか持たない。 +以下にEitherクラスが提供しているAPI(表\ref{EitherAPI})を記す。 +\begin{table}[htb] +\begin{center} +\caption{Eitherに実装されているAPI} +\begin{tabular}{|p{15em}|p{24em}|} \hline +{\small{\tt boolean isA()}} & {\small EitherがAを持っているかどうかを調べる。持っている場合trueを返す。}\\ \hline +{\small{\tt boolean isB()}} & {\small EitherがBを持っているかどうかを調べる。持っている場合trueを返す。}\\ \hline +{\small{\tt A a()}} &{\small Aの値を取得する。}\\ \hline +{\small{\tt B b()}} &{\small Bの値を取得する。}\\ \hline +\end{tabular} +\label{EitherAPI} +\end{center} +\end{table} + +{\tt Either<A、B>} の使い方は、{\tt isA()}を用いて関数が{\tt Error}を返していないかを調べる。 +{\tt Error}でない場合は{\tt b()}で関数の返り値を取得する。 + + + \section{TreeNode} Jungleの木構造は、複数のノードの集合で出来ている。 @@ -231,6 +216,24 @@ 3 - 7行目でルートノードの1番目の子ノードを取得し、 8 - 9行目で、ルートの1番目の子ノードから、属性名 "name" とペアの属性値を取得している。 + +\section{NodePath} +Jungleでは、木のノードの位置を{\tt NodePath}クラスを使って表す。 +{\tt NodePath}クラスはルートノードからスタートし、対象のノードまでの経路を数字を用いて指し示す。また、ルートノードは例外として-1と表記される。 +{\tt NodePath}クラスを用いて{\tt< -1,1,2,3>}を表している際の例を図\ref{NodePath}に記す。 + +\begin{figure}[htpb] +\begin{center} +\includegraphics[scale=0.7]{figures/nodePath.pdf} +\caption{NodePath} +\label{NodePath} +\end{center} +\end{figure} + +\newpage + + + \section{木の編集API} Jungleの木の編集は{\tt Default Jungle Tree Editor}クラスを用いて行われる。 {\tt Default Jungle Tree Editor}クラスは、木に対する編集を行うAPIが定義されているJungle Tree Editorインターフェースを実装している。