大規模トライ用ライブラリの公開(ソースコードのみ)

ダウンロード

大規模トライ用ライブラリのソースコードSubversion にコミットしました.

使い方

基本的な使い方については,ディレクトリ tool 以下のソースコードを見れば分かると思います.

  • トライの構築
    • tool/taiju-build.cc
  • トライの変換
    • tool/taiju-convert.cc
  • トライからの検索
    • tool/taiju-find.cc

# taiju-test.cc は誤ってアップロードしたファイルなので,スルーしてください.次に更新するときに削除する予定です.

反省点

構築用と検索用でクラスを分けたこともあり,ファイルの数がとても多くなりました.もう少し上手くまとめることができれば良かったのですが….

実装とデバッグに時間がかかりすぎました.今回の開発では std::iostream, std::streambuf, std::stringstream でハマったので,次からは注意しようと思います.

データのサイズが 2GB や 4GB を超える場合,それなりに注意してプログラムを書いたとしてもハマるということが分かりました.上述の std::streambuf や std::stringstream の動作に関する知識不足などは典型的な例でしょうか.32-bit 環境のサポートを捨ててでもバグを避けようと 64-bit 整数を多用したものの,見えない or 気づかないところにバグが潜んでいました.

  • std::streambuf(ssgnc 改修の進捗 - やた@はてな日記
    • かなり稀なケースだとは思いますが,巨大なバッファを使った巨大なデータを入出力する場合,継承したクラスの xsgetn() や xsputn() を適切にオーバーロードしておかないと,オーバーフローにより異常な動作をする可能性があります.
  • std::stringstream
    • 大量のデータを書き込んだところ,4GB 前後までした正しく書き込めていませんでした.この問題は環境依存だと思います.