29
|
1 Tue Oct 28 01:28:47 JST 2008
|
|
2
|
|
3 まぁ、一応、それっぽくはなって来たかな。
|
|
4
|
|
5 readが0を返す場合と、-1を返す場合がある。0の場合は、
|
|
6 selectの関係があるので、close()しない方が良いと思う。
|
|
7
|
28
|
8 Tue Oct 28 00:40:44 JST 2008
|
|
9
|
|
10 mode change の最初のml_replace で、delete command が出てない。
|
29
|
11 prevline==-1 のcheckのせいだった
|
28
|
12 delete command のasserttion がfailすることがある。
|
29
|
13 assert del_cmd==0 は正しくない
|
|
14
|
|
15 ml_append
|
|
16 複数行(n) appendすると、prev_line_flushが xtr=1 で複数回呼ばれ
|
|
17 rep_register では、xtr=n となる。
|
|
18 ml_delete
|
|
19 複数行(n) deleteすると、prev_line_flushが xtr=-1 で複数回呼ばれ
|
|
20 rep_register では、xtr=-n となる。
|
|
21
|
28
|
22
|
27
|
23 Mon Oct 27 15:53:19 JST 2008
|
|
24
|
|
25 直せば直すほど、動かなくなってくる。joinのsessionが変らしい。
|
|
26
|
26
|
27 Sun Oct 26 21:45:49 JST 2008
|
|
28
|
|
29 なんか、でたらめな感じ... そもそも、コマンドがちゃんと
|
|
30 読めてない?
|
|
31
|
27
|
32 command を読み込む時に、 三回も malloc して、しかも、
|
|
33 一回は、free してない。
|
|
34
|
18
|
35 Sun Sep 7 20:18:14 JST 2008
|
|
36
|
|
37 ml_replace
|
|
38 文字のinsert の時には毎回呼ばれる
|
|
39 文字のdeleteの時には、最初の一回しか呼ばれない
|
|
40 ml_append
|
|
41 行のopen の時に一回だけ呼ばれる
|
|
42 複数行appendしても、一回ずつ呼ばれる
|
|
43 ml_delete
|
|
44 複数行deleteしても、一回ずつ呼ばれる
|
|
45
|
|
46 changed_common
|
|
47 これらが呼ばれて変更があった時に呼ばれる
|
|
48 複数行の変更は一回にまとめられて、変更行数がxtraに入る
|
|
49
|
|
50 というわけなので、以下のようなアルゴリズムになると思われる
|
|
51
|
|
52 ml_* で、prev_line_flushを呼ぶ。
|
|
53
|
|
54 prev_line とcurrent lineを比較して異なっていたら、
|
|
55 insert されているdelete commandがあったらキャンセルする
|
|
56 溜っているのは、changed_commonのreplaceのケースのみ
|
|
57
|
|
58 prev_line をcurrent lineに設定して、
|
|
59
|
|
60 delete の場合は、DELETE_CMDとして現在の行をセーブして終了
|
|
61 ml_deleteは1行毎に呼ばれる
|
|
62 送ってしまっても構わない
|
|
63
|
|
64 append の場合は何もしない
|
|
65 最後にまとめてchanged_common でINSERT_CMDを発行すれば良い`
|
|
66
|
|
67 あとはreplaceの場合となる
|
|
68
|
|
69 既にprev_lineがsaveしてあったら何もしないで終了
|
|
70 文字のinsertの場合
|
|
71
|
|
72 そうでなかったら、current lineを DELETE_CMD としてセーブする
|
|
73 最初のreplaceの場合
|
|
74
|
|
75 changed_common で、
|
|
76
|
|
77 xtra < 0 の場合は何もしないで溜ったコマンドを送信
|
|
78 ml_delete の分だけDELETE_CMDが送信される (送ってなければ)
|
|
79 xtra > 0 の場合は、INSERT_CMD を行数の分だけ送信
|
|
80 xtra == 0 の場合は、INSERT_CMD を送信して、
|
|
81 現在行をDELETE_CMDとしてセーブ
|
|
82 (ml_replace は文字の削除では呼ばれないので、ここでセーブする必要がある)
|
|
83
|