• 1次元のテキスト情報を保持するクラスをバッファと呼ぶ。
  • バッファは以下の機能を持つ。
    • テキスト情報参照
    • テキスト削除・挿入
  • 上記メソッドで、参照範囲・削除範囲・挿入位置を示すために、バッファ先頭からのオフセット(size_t)を用いる。
  • バッファのデータ構造には様々な物があり、どれも一長一短である。
  • 数メガバイトまでの比較的小容量であれば gap_vector が処理時間・使用メモリサイズともに高性能である。
  • 数100メガバイト以上になると、gap_vector はメモリ移動量が多くなり処理時間を要する場合がある。
    そのような場合は piece_table 等の階層的データ構造の方が優れると考えられる。
  • バッファクラスのインタフェースは std::vector に準じたものにしておく。
    ただし、編集位置の指定はイテレータではなくインデックス(0..*)を用いることとする。これは編集位置の保持を簡単にするためである。
    インタフェースさえ同じであれば、別のバッファクラスに置き換えることは容易である。

参考文献:

  1. Data Structures for Text Sequences
  2. gap_vector
  3. テキストエディタ用バッファの各種データ構造とその評価
  4. テキストエディタ用バッファの各種データ構造とその評価 (2)
  5. バイナリエディタ用仮想バッファの実装と評価
  6. テキストエディタ用仮想バッファの実装と評価

関連項目:


: