必要と思う機能は一通り書き上げたつもりなので一旦の完成とします。
使い方、仕様については wiki に書きました。
当初とはクラス名やメソッド名に変更があります。
CombinableObservableCollection<T>
やReadOnlySortFilterObservableCollection<T>
、Comparer<T>.Invert()
のようにコレクションに関するコードも追加しました。
ツリー構造と関係のないものはあまり書きたくなかったのですが、HierarchyWrapperの実装や派生先でのカスタマイズを考えたときに必要でした。
ツリー構造以外の場面でも使用できるので公開しています。
カスタマイズの部分だけはReadOnlySortFilterObservableCollection<T>
を定義しなくてもObservableComputationsを使えたのですが、使うことになるかどうかもわからないライブラリを含めるのは憚られました。
今後の方針
バグ修正に加え、定義済みTreeの追加を思案しています。
名前空間TreeStructures.Tree;
は現在、DateTimeTreeとObservedPropertyTreeだけですが、ディレクトリをツリーにするとか、クラスの継承関係をツリーにするとか。
現状では、二分探索木、QuadTree、木の回転のような数学的な部分にはあまり踏み込んでいません。
データ構造としての表現に重きを置いています。
もしこの辺りのコードを書くのであればプロジェクトを分けようかと思います。
と言っても、今のところ書く予定はありません。
おわり。