はじめに
- C/C++ によりテキストエディタを実装するための技術について述べる。
- 以前も同じような文章を書いたが、今回はジェネリックなプログラミングにより、
見通しがよく柔軟で拡張性に優れたコードを示すことを主目的とする。
- ただし、ジェネリックなプログラミングに慣れていないと理解が困難で、逆に見通しが悪いと感じるかもしれない。
そんな人はどこかで勉強して出直してくるように。
※ そう言うオイラもジェネリックなプログラミングに目覚めて1年足らず。間違いや理解が浅い部分もあるに違いない。
不手際を見つけた場合はメールまたはtwitterで優しく突っ込んでね(はあと)。
バッファ
- テキストエディタにおいて1次元のテキストの並び(テキストシーケンス)を管理するクラスはバッファと呼ばれる。
- バッファのためのデータ構造には様々のものがある。最強のデータ構造というものはなく、それぞれ長短所が異なる。
OSやCPU・メモリ・HDD速度が異なれば優劣が逆転する場合もある(かもしれない)。
- したがって、バッファクラスのインタフェースをよーく考えて決め、データ構造を完全に隠蔽しておくのがよい。
そうすれば環境が変わってデータ構造の優劣が逆転した場合や、もっと優れたデータ構造・アルゴリズムが開発された場合は、
それを実装しクラスを入れ替えるだけでよい。
- で、バッファクラスのインタフェースであるが、よく練られ実績のあるものを採用しておくのが無難である。
具体的にはSTLに準じたインタフェースを備えるクラスにするのがよいと考える。
MFCによるバッファクラスの利用
- MFC はモデルビューアーキテクチャのC++フレームワークである。
ひとつのドキュメントが複数のビューを保持することが出来る。
- ドキュメントクラスがバッファオブジェクトを所有し、ビューがそれを参照して画面描画するという枠組み
- 編集操作はビューで解釈され、バッファの編集メソッドがコールされる。
画面描画処理