新生!

大体再実装が終わりましたので、alpha-31としてリリースします。

http://hp.vector.co.jp/authors/VA028375/thebe/

バグは大量に復活しているはずです。

データ構造としては、同構造のギャップバッファを、データ本体+副バッファ×使用レイアウトの数だけ並列に存在させています。上下分割していても、同じレイアウトであれば共有されますし、テキスト/バイナリもレイアウトを共有できますので、上はHTML下はPascalなんてことをしない限りは、常に副バッファはひとつだけです。

以前は、副バッファ相当の情報をテキスト/バイナリで共有しませんでした。

また、行の管理をやめました。副バッファ中のフラグビットで全てを処理します。これによって大幅に消費メモリを削減できました。逆に、処理速度はやや重くなっているかもです。

以前は、行を別にリンクリストで表していました。これはテキスト/バイナリで別々に構成され、またバイナリ時も構成していましたので、バイナリエディタとしては明らかに無駄でした。今度は逆に、テキスト時も行は構成しませんので、色々重い処理が入っています。

というわけで、省メモリになって遅くなったわけですが、この遅さは、画面に表示した量に比例する遅さです。以前は、文字挿入時、速度は(テキスト時のみ)以降の行数に比例していましたので、省メモリとあわせて、巨大ファイルの取り扱いに関しては圧倒的な改善となります。(k.inabaさんには重ね重ね解説をいただきまして、本当にありがとうございます)

それとギャップバッファですが、以前のリンクリストと比べてランダムアクセスは速くなっている筈なのですが、何十MBものファイルになると、ギャップの移動が体感できてしまいます。やはりMMXにすべきか…

なお、色分けと見出しはまだ再実装できていません。次はDFAか…