Mercurial > hg > Papers > 2016 > tatsuki-prosym
changeset 68:73352d3ae92b
fix
author | Kazuma Takeda |
---|---|
date | Fri, 06 Jan 2017 21:40:48 +0900 |
parents | b0acdf8e1f1c |
children | 0c8be5003f0f |
files | Slide/prosym.md |
diffstat | 1 files changed, 63 insertions(+), 66 deletions(-) [+] |
line wrap: on
line diff
--- a/Slide/prosym.md Fri Jan 06 19:43:04 2017 +0900 +++ b/Slide/prosym.md Fri Jan 06 21:40:48 2017 +0900 @@ -129,8 +129,9 @@ ``` Java // ノードが持っている子どもの個数を返す int size() + // ノードが持つ子どもの中から、 変数numで指定された位置にある子ノードを返す -<Either Error,TreeNode> at(int num) +Either<Error, TreeNode> at(int num) ``` Attributeクラスを利用し、ノードの保持する値にアクセスする。 @@ -138,6 +139,7 @@ ``` Java // ノードが持つ値から、属性名 keyとペアの属性値をByteBuffer型で返す ByteBuffer get(String key) + // ノードが持つ値から、属性名 keyとペアの属性値をString型で返す String getString(String key) ``` @@ -241,7 +243,7 @@ DefaultNodePath editNodePath = new DefaultNodePath(); Either<Error, JungleTreeEditor> either = editor.addNewChildAt(editNodePath, 0); if (either.isA()) - throw new IllegalStateException(); + // throw error. editor = either.b(); editor.success(); @@ -249,7 +251,7 @@ # 検索APIの実装 -属性名key 属性値valueの組で検索を行うAPIの実装を、木の走査を行うTraverserクラス内に、lambda式を用いて行った。 +属性名key 属性値valueの組で検索を行うAPIの実装を、木の走査を行うTraverserクラス内に、ラムダ式を用いて行った。 以下に検索を行う関数findの定義を記述する。 @@ -315,14 +317,14 @@ # Indexの実装 -Indexから属性名 name 属性値 Kanagawa のデータを持つ、ノードのIteratorを取得するサンプルコードを記述する。 +Indexから属性名"name" 、属性値"Takeda" のデータを持つ、ノードのIteratorを取得するサンプルコードを記述する。 ``` Java Optional<TreeMap<String, List<TreeNode>>> indexOp = indexMap.get("name"); if (!indexOp.isPresent()) return new NulIterator<TreeNode>(); TreeMap<String, List<TreeNode>> index = indexOp.get(); -Optional<List<TreeNode>> nodeListOp = index.get("kanagawa"); +Optional<List<TreeNode>> nodeListOp = index.get("Takeda"); if (!nodeListOp.isPresent()) return new NulIterator<TreeNode>(); // 持っていた場合OptionalオブジェクトからノードリストのIteratorを返す。 @@ -333,7 +335,7 @@ ・中身が入っているか確認、入っていた場合Indexを取得する。 -・取得したIndexに、検索で使用する属性値"kanagawa"でgetを行う。属性名"name" 属性値kanagawaの値を持つノードのリストが、Optionalクラスに包まれて返ってくる。 +・取得したIndexに、検索で使用する属性値"Takeda"でgetを行う。属性名"name" 属性値"Takeda"の値を持つノードのリストが、Optionalクラスに包まれて返ってくる。 ・中身が入っているか確認、入っていた場合OptionalオブジェクトからノードリストのIteratorを返す。 @@ -351,14 +353,14 @@ このレンダリングエンジンでは以下の2つの木からなる。 +- <u>ContentTree</u> + +出力するデータが記述された木 + - <u>LayoutTree</u> 出力する形式が記述された木 -- <u>ContentTree</u> - -出力するデータが記述された木 - レンダリングエンジンでは、この木同士を参照しながらレンダリングしていく。 # ContentTree @@ -432,7 +434,7 @@ </tr> <tr> <td>use</td> - <td>このノードが、どのContentsに対してのLayoutを持つかを記述するタグ。表\ref{tag}にタグとContentsの対応を記述する</td> + <td>このノードが、どのContentsに対してのLayoutを持つかを記述するタグ。次のページのスライドにタグとContentsの対応を記述する</td> </tr> <tr> <td>その他</td> @@ -440,62 +442,50 @@ </tr> </table> -# multiComponent +# useにおけるタグ対応表 -Layoutが複数のComponentを参照する際は以下のような木構造を構築する。 +<center> +<table border="1"> + <tr> + <td>tag</td> + <td>content</td> + </tr> + <tr> + <td>image</td> + <td>画像の表示</td> + </tr> + <tr> + <td>cals</td> + <td>table</td> + </tr> + <tr> + <td>date</td> + <td>日付の表示</td> + </tr> + <tr> + <td>text</td> + <td>日記の本文</td> + </tr> + <tr> + <td>title</td> + <td>日記のタイトル</td> + </tr> + <tr> + <td>fileName</td> + <td>画像の名前</td> + </tr> +</table> +</center> + +# multiComponent <div style="text-align: center;"> - <img src="./images/multiComponent.pdf" alt="message" width="300"> -</div> - -上の例ではdiaryMulti@componentはdiaryText@componentとdiaryImage@componentを参照している。 - -# レンダリングの流れ - -ContentTreeとLayoutTreeの2つを使用したレンダリングの流れを記述する。 - -・ContentsTreeのルートノードは、属性名 component 属性値 Multi@Componentの組を持つので、LayoutTreeのNode2を参照する。 - -<div style="text-align: center;"> - <img src="./images/multiComponent01.pdf" alt="message" width="400"> -</div> - -# レンダリングの流れ - -・Node2は自身のNodeNameしか持たないので、子ノードであるNode3,Node4に記述されているデータの参照を行う。 - -<div style="text-align: center;"> - <img src="./images/multiComponent02.pdf" alt="message" width="400"> + <img src="./images/multiComponent.pdf" alt="message" width="300"> </div> -# レンダリングの流れ - -・Node3は属性名 displayComponentName、属性名 diaryImageの組を持つため、NodeNameがdiaryText@componentのノードを参照している。 - -<div style="text-align: center;"> - <img src="./images/multiComponent04.pdf" alt="message" width="400"> -</div> - -# レンダリングの流れ - -・レンダリングエンジンは、参照先のノードに記述されたルールに則ってHTMLを生成する。 - -・Node3は、これ以上データを持たないため、次はNode4を参照する。 +Layoutが複数のComponentを参照する際は上の例のような木構造を構築する。 -<div style="text-align: center;"> - <img src="./images/multiComponent05.pdf" alt="message" width="400"> -</div> - - -# レンダリングの流れ - -・Node4は属性名 displayComponentName 属性名 dialyText@Componentの組を持つため、NodeNameがdialyText@Componentのノードを参照している。 - -<div style="text-align: center;"> - <img src="./images/multiComponent05.pdf" alt="message" width="400"> -</div> - -・レンダリングエンジンは、参照先のノードに記述されているルールに則ってhtmlを生成する。 +上の例のMulti@componentはdiaryText@componentとdiaryImage@componentを参照している。 # 設計 @@ -528,14 +518,21 @@ 先ほどのギャップのあるコードの木と、ギャップのないコードの木を使った2つのrenderingEngineの性能測定を行い、木の構造が実行速度にどれだけ影響するかを確かめる。 測定は100000回のレンダリングリクエストを処理するまでの時間の比較で行う。 -<div style="text-align: center;"> - <img src="./images/benchMark.pdf" alt="message" width="400"> -</div> +<center> +<table border="1"> + <tr> + <td>設計を行った木</td> + <td>249s</td> + </tr> + <tr> + <td>設計を行わなかった木</td> + <td>277s</td> + </tr> +</table> +</center> 測定結果より、Jungleデータベースは、設計を行うとプログラム内のデータ構造とギャップがなく、高速に動作するプログラムを簡潔に記述できるようになる。 - - # まとめ 本研究ではJungleを使った例題アプリケーションとしてRenderingEngineの実装を行った。