# HG changeset patch # User Shinji KONO # Date 1287139038 -32400 # Node ID 3cacd9d0e1c5069d7dec9eef77debb0cee4a21fa # Parent 2107530c3d727f24bd137ce970ad0a39c82db857 revert to old diff -r 2107530c3d72 -r 3cacd9d0e1c5 Todo --- a/Todo Tue Oct 12 16:17:42 2010 +0900 +++ b/Todo Fri Oct 15 19:37:18 2010 +0900 @@ -1,7 +1,146 @@ +Thu Oct 14 14:27:22 JST 2010 + +でも単純ソートはうまくいかないはず。 + +あ、そうか。このアルゴリズムだと、sentListがクリアされないものがいるね。 + +二巡目のack で消すのだろうが... + +あとsortの範囲の問題がやっぱりある。 + Tue Oct 12 10:37:38 JST 2010 やっぱり二周目に割り込んだコマンドが正しくsortされない。 + Editor3 Editor2 Editor1 + e(eid=2) + e(eid=2) + e(eid=2) + e(eid=2) c(eid=1) + ea(eid=2)* + c(eid=1) + ea(eid=2)* c(eid=1) + ea(eid=2)* c(eid=1) + ca(eid=1)* + ca(eid=1)* + ca(eid=1)* + + [e,c] [e,c] [c,e] + +うーん。 + + Editor3 Editor2 Editor1 + e(eid=2) a(eid=1) + a(eid=1) e(eid=2) + e(eid=2) a(eid=1) + e(eid=2)* c(eid=1) + a(eid=1)* + ea(eid=2)* + c(eid=1) + aa(eid=1)* c(eid=1) + ea(eid=2)* aa(eid=1)* c(eid=1)* + ca(eid=1)* + ca(eid=1)* + + [a,e,c] [a,e,c] [a,e,c] + +他のエディタのコマンドが来た時に、優先順位でいきなりソート(merge)して良い。o + 自分のコマンドは、過去の低い優先順位を追い越さない。 x + 一周(ack)が来たら、そこまでのundoは捨てて順位は固定。 x +既に他のコマンドを送信した後に、自コマンドが来たら、その前までの自編集以外の編集まで確定。o +自コマンドのackで、まだ確定してない場合は確定。o +他コマンドのackは何もしない o +merge 中の自コマンドは、確定させて処理(merge後に送信と同じ) + +Ackが来たら確定で良い? + + Editor3 Editor2 Editor1 + c(eid=3) e(eid=2) a(eid=1) + a(eid=1) c(eid=3) e(eid=2) + e(eid=2) a(eid=1) c(eid=3) + c(eid=3)* e(eid=2)* d(eid=1) <- このd がsortされない必要があるらしい + d(eid=1) ca(eid=3) a(eid=1)* + aa(eid=1)* d(eid=1) ea(eid=2)* + ea(eid=2)* aa(eid=1)* ca(eid=3)* + d(eid=1)* + da(eid=1)* + da(eid=1)* + + [a,e,c,d] [a,e,c,d] [a,e,c,d] + +優先順位1でない場合 + + Editor1 Editor2 Editor3 + c(eid=1) e(eid=2) a(eid=3) + a(eid=3) c(eid=1) e(eid=2) + e(eid=2) a(eid=3) c(eid=1) + c(eid=1)* e(eid=2)* d(eid=3) <- このd がsortされない必要があるらしい + d(eid=3) ca(eid=1) a(eid=3)* + aa(eid=3)* d(eid=3) ea(eid=2)* + ea(eid=2)* aa(eid=3)* ca(eid=1)* + d(eid=3)* + da(eid=3)* + da(eid=3)* + + [c,e,a,d] [c,e,a,d] [c,e,a,d] + +優先順位に関係なく、他コマンドの後の自分のコマンドは +sort しないものらしい。 + +そこにさらに他コマンドが割り込んだ場合は? + + Editor1 Editor2 Editor3 + c(eid=1) a(eid=3) + a(eid=3) c(eid=1) + a(eid=3) c(eid=1) + c(eid=1)* e(eid=2) d(eid=3) <- このe,d がsortされない必要があるらしい + d(eid=3) ca(eid=1)* a(eid=3)* + aa(eid=3)* d(eid=3) e(eid=2) <- a(eid=3)は確定、d(eid=3)は未確定 + e(eid=2) aa(eid=3)* ca(eid=1)* <- Editor1のe(eid=2)は、まだ未確定 + e(eid=2)* d(eid=3)* + da(eid=3)* ea(eid=2)* + ea(eid=2)* da(eid=3)* <- e(eid=2)を確定 + + [c,a,e,d] [c,a,e,d] [c,a,e,d] + +e(eid=2) は d(eid=3) を追い越す必要がある。 + +他のエディタのコマンドが来た時に、優先順位でいきなりソート(merge)して良い。o +既に他のコマンドを送信した後に、自コマンドが来たら、その前までの自編集以外の編集まで確定。o +自コマンドのackで、まだ確定してない場合は確定。o +他コマンドのackは 二周目のackが来たら、そのコマンドまで確定 +merge 中の自コマンドは、確定させて処理(merge後に送信と同じ) + + Editor1 Editor2 Editor3 + c(eid=1) a(eid=3) + a(eid=3) c(eid=1) + a(eid=3) c(eid=1) + c(eid=1)* e(eid=2) d(eid=3) <- このe,d がsortされない必要があるらしい + d(eid=3) a(eid=3)* + d(eid=3) e(eid=2) + e(eid=2) + e(eid=2)* d(eid=3)* + + [c,a,e,d] [c,a,e,d] [c,a,e,d] + +もしかして、ack って必要ないの? え〜 + + Editor1 Editor2 Editor3 + c(eid=1) e(eid=2) a(eid=3) + a(eid=3) c(eid=1) e(eid=2) + e(eid=2) a(eid=3) c(eid=1) + c(eid=1)* e(eid=2)* d(eid=3) <- このd がsortされない必要があるらしい + d(eid=3) a(eid=3)* + d(eid=3) + d(eid=3)* + + [c,e,a,d] [c,e,a,d] [c,e,a,d] + +4つの場合の特殊性はある? + + + + Mon Oct 11 22:12:35 JST 2010 あ、そうか。singleton case 中のコマンドは無視されてしまうわけね。SYNC すれば良いはずだが。