view src/REPNOTE.txt @ 30:bf9fabc0ae84 almost-works

*** empty log message ***
author kono
date Tue, 28 Oct 2008 01:42:44 +0900
parents ef6d2a18d7c2
children 8d4ffb7c9f4e
line wrap: on
line source

Tue Oct 28 01:28:47 JST 2008

まぁ、一応、それっぽくはなって来たかな。

readが0を返す場合と、-1を返す場合がある。0の場合は、
selectの関係があるので、close()しない方が良いと思う。

SessionManagerが死ぬと、read() で無限ループに入ってしまう。

Tue Oct 28 00:40:44 JST 2008

mode change の最初のml_replace で、delete command が出てない。
     prevline==-1 のcheckのせいだった
delete command のasserttion がfailすることがある。
     assert del_cmd==0 は正しくない

ml_append
    複数行(n) appendすると、prev_line_flushが xtr=1 で複数回呼ばれ
    rep_register では、xtr=n となる。
ml_delete
    複数行(n) deleteすると、prev_line_flushが xtr=-1 で複数回呼ばれ
    rep_register では、xtr=-n となる。


Mon Oct 27 15:53:19 JST 2008

直せば直すほど、動かなくなってくる。joinのsessionが変らしい。

Sun Oct 26 21:45:49 JST 2008

なんか、でたらめな感じ... そもそも、コマンドがちゃんと
読めてない?

command を読み込む時に、 三回も malloc して、しかも、
一回は、free してない。

Sun Sep  7 20:18:14 JST 2008

ml_replace
    文字のinsert の時には毎回呼ばれる
    文字のdeleteの時には、最初の一回しか呼ばれない
ml_append
    行のopen の時に一回だけ呼ばれる
    複数行appendしても、一回ずつ呼ばれる
ml_delete
    複数行deleteしても、一回ずつ呼ばれる

changed_common
   これらが呼ばれて変更があった時に呼ばれる
   複数行の変更は一回にまとめられて、変更行数がxtraに入る

というわけなので、以下のようなアルゴリズムになると思われる   

ml_* で、prev_line_flushを呼ぶ。

    prev_line とcurrent lineを比較して異なっていたら、
        insert されているdelete commandがあったらキャンセルする
        溜っているのは、changed_commonのreplaceのケースのみ

    prev_line をcurrent lineに設定して、

    delete の場合は、DELETE_CMDとして現在の行をセーブして終了
	ml_deleteは1行毎に呼ばれる
        送ってしまっても構わない

    append の場合は何もしない
        最後にまとめてchanged_common でINSERT_CMDを発行すれば良い`

    あとはreplaceの場合となる

	既にprev_lineがsaveしてあったら何もしないで終了
	     文字のinsertの場合

	そうでなかったら、current lineを DELETE_CMD としてセーブする
             最初のreplaceの場合

changed_common で、

    xtra < 0 の場合は何もしないで溜ったコマンドを送信
	ml_delete の分だけDELETE_CMDが送信される (送ってなければ)
    xtra > 0 の場合は、INSERT_CMD を行数の分だけ送信
    xtra == 0 の場合は、INSERT_CMD を送信して、
        現在行をDELETE_CMDとしてセーブ
	 (ml_replace は文字の削除では呼ばれないので、ここでセーブする必要がある)