PieceTableをUndo/Redoの関係

 ここ数日、ドキュメントクラスのファイル保存と、Undo/Redoの設計・実装について考え中。FileMappingとPieceTableを使ったファイルの読み込みとUndo/Redoの実装は簡単そう。Undo/Redoで扱うのは、削除か挿入か・位置・長さだけで済み、挿入・削除ごとにデータをコピーする必要がない。これは、データを削除しても、PieceTableが持つ内部的なデータは削除されないため。
 面倒なのは保存の処理。PieceTableを有効活用することでUndo/Redoのメモリ消費が抑えられるものの、ファイルを上書き保存してしまうと、今まで構築したPieceTableが利用できなくなる(あわせてUndoRedoも使用不能に)。これを解決するためには、保存の度にUndo/Redoバッファを再構築する必要がでてくる。Undo/Redoバッファの再構築はとりあえず置いといて、今度はUndo/Redoバッファに挿入・削除データを保存する必要がでてきくる。そして、メモリサイズの限界を考える必要もある。「上書き保存」という処理により「指定サイズ以上の操作はUndo/Redoはサポートしない」のような制限が出てくるわけで・・。