# HG changeset patch # User Kazuma Takeda # Date 1482667077 -32400 # Node ID 763d63697d933520ea8ed453b13037c1481e6b80 # Parent 7071c1eff18511003b666050ae812dca803040d5 change node. diff -r 7071c1eff185 -r 763d63697d93 Slide/prosym.md --- a/Slide/prosym.md Sun Dec 25 20:02:52 2016 +0900 +++ b/Slide/prosym.md Sun Dec 25 20:57:57 2016 +0900 @@ -160,7 +160,7 @@ ``` -# JungleのAPI +# Jungleのサンプルコード Jungleの例を記載する。 @@ -199,14 +199,11 @@  message -# ノードの追加、削除 +# ノードの追加 ``` Java // 変数pathで指定した場所にある、ノードの子供の変数posで指定した位置子ノードを追加 Either addNewChildAt( NodePath path, int pos) - -// 変数pathで指定した場所にある、ノードの子供の変数posで指定した位置の子ノードを削除 -Either deleteChildAt( NodePath path, int pos) ``` # ノードに対してデータの挿入 @@ -234,7 +231,7 @@ ``` -# JungleのAPI +# Jungleのサンプルコード Jungleの木を編集する例を記載する。 以下のコードは木からEditorを取得し、変数editorNodePathで指定したノードに新しい子ノードを追加したものである。 @@ -250,8 +247,47 @@ ``` +# 検索APIの実装 + +属性名key 属性値valueの組で検索を行うAPIの実装を、木の走査を行うTraverserクラス内に、lambda式を用いて行った。 + +以下に検索を行う関数findの定義を記述する。 + +``` Java +public Iterator find(Query query, String key, String searchValue); +``` + +関数findは引数に、Query query、String key、String valueの3つの引数を取り、条件に一致したノードのIteratorインタフェースを返す。 + + +第1引数には、探索の条件を記述する関数boolean comdition(TreeNode)を定義したInterface Queryを、第2、第3引数の、String key、String ValueはIndexを用いた絞込みに使用する。 + +# 関数findを用いた検索APIのサンプルコード + +``` Java +InterfaceTraverser traverser = tree.getTraverser(true); +Iterator resultNodeIterator = traverser.find((TreeNode node) -> { + String personId = node.getAttributes().getString("Personid"); + if (personId == null) return false; + return personId.equals("p:2"); +}, "element", "Person"); +``` + +・Traverserクラスは木の走査を行う。まずは木から取得してくる。 + +・Indexからfindの第2、第3引数である、属性名"element" 属性値"Person"の組のノードを取得し、Queryに渡す。 + +・引数のノードから関数getAttributes().getString("Personid")で属性名Personidとペアになっている属性値を取得する。 + +・属性値がnullだった場合、このノードには属性名がPersonidの組のデータは存在しないので、falseを返し次のノードの評価を行う。 + +・属性値がnullでなかった場合、p:2と一致するかどうかを調べ結果を返す。 + + # JungleでのIndexの実装 +検索を行う際にIndexを使いたい。そこでIndexを実装した。 + Jungleは、非破壊的木構造というデータ構造上、過去の版の木構造を全て保持しているため、全ての版に独立したIndexが必要となる。 そのため、前の版のIndexを破壊すること無く、Indexを更新する必要があった。 @@ -301,42 +337,6 @@ ・中身が入っているか確認、入っていた場合OptionalオブジェクトからノードリストのIteratorを返す。 -# 検索APIの実装 - -属性名key 属性値valueの組で検索を行うAPIの実装を、木の走査を行うTraverserクラス内に、lambda式を用いて行った。 - -以下に検索を行う関数findの定義を記述する。 - -``` Java -public Iterator find(Query query, String key, String searchValue); -``` - -関数findは引数に、Query query、String key、String valueの3つの引数を取り、条件に一致したノードのIteratorインタフェースを返す。 - - -第1引数には、探索の条件を記述する関数boolean comdition(TreeNode)を定義したInterface Queryを、第2、第3引数の、String key、String ValueはIndexを用いた絞込みに使用する。 - -# 関数findを用いた検索APIのサンプルコード - -``` Java -InterfaceTraverser traverser = tree.getTraverser(true); -Iterator resultNodeIterator = traverser.find((TreeNode node) -> { - String personId = node.getAttributes().getString("Personid"); - if (personId == null) return false; - return personId.equals("p:2"); -}, "element", "Person"); -``` - -・Traverserクラスは木の走査を行う。まずは木から取得してくる。 - -・Indexからfindの第2、第3引数である、属性名"element" 属性値"Person"の組のノードを取得し、Queryに渡す。 - -・引数のノードから関数getAttributes().getString("Personid")で属性名Personidとペアになっている属性値を取得する。 - -・属性値がnullだった場合、このノードには属性名がPersonidの組のデータは存在しないので、falseを返し次のノードの評価を行う。 - -・属性値がnullでなかった場合、p:2と一致するかどうかを調べ結果を返す。 - # HTML Rendering Engine Jungleの特性を生かしたRendering Engineを開発した。