annotate src/REPNOTE.txt @ 29:ef6d2a18d7c2

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