Mercurial > hg > RemoteEditor > REPSessionManager
comparison rep/translator/TranslatorImpl.java @ 327:7b6dede07f4a
*** empty log message ***
author | kono |
---|---|
date | Sat, 11 Oct 2008 19:31:13 +0900 |
parents | b1a6acf0b8a9 |
children | 36faf76a087c |
comparison
equal
deleted
inserted
replaced
326:b1a6acf0b8a9 | 327:7b6dede07f4a |
---|---|
16 public int eid; | 16 public int eid; |
17 /* | 17 /* |
18 * queue が5つもいるって、あまりに馬鹿げてる。 | 18 * queue が5つもいるって、あまりに馬鹿げてる。 |
19 */ | 19 */ |
20 public REPCommandOptimizer optimizer; | 20 public REPCommandOptimizer optimizer; |
21 private LinkedList<REPCommand> sentCmds; | |
22 private LinkedList<REPCommand> unMergedCmds; | 21 private LinkedList<REPCommand> unMergedCmds; |
23 public LinkedList<REPCommand> sentMergedList; | 22 public LinkedList<REPCommand> sentMergedList; |
24 private LinkedList<REPCommand> mergeAgainList; | 23 private LinkedList<REPCommand> mergeAgainList; |
25 boolean merge_mode = false; | 24 boolean merge_mode = false; |
26 | 25 |
27 public TranslatorImpl(int _eid,REPCommandOptimizer opt){ | 26 public TranslatorImpl(int _eid,REPCommandOptimizer opt){ |
28 eid = _eid; | 27 eid = _eid; |
29 optimizer = opt; | 28 optimizer = opt; |
30 sentCmds = new LinkedList<REPCommand>(); | |
31 unMergedCmds = new LinkedList<REPCommand>(); | 29 unMergedCmds = new LinkedList<REPCommand>(); |
32 mergeAgainList = new LinkedList<REPCommand>(); | 30 mergeAgainList = new LinkedList<REPCommand>(); |
33 sentMergedList = new LinkedList<REPCommand>(); | 31 sentMergedList = new LinkedList<REPCommand>(); |
34 } | 32 } |
35 | 33 |
38 * The command is sent to the next editor | 36 * The command is sent to the next editor |
39 * @param cmd | 37 * @param cmd |
40 * @return translated command. | 38 * @return translated command. |
41 */ | 39 */ |
42 public REPCommand transSendCmd(REPCommand cmd){ | 40 public REPCommand transSendCmd(REPCommand cmd){ |
43 sentCmds.add(cmd); | 41 assert(cmd.eid==eid); |
44 unMergedCmds.add(cmd); | 42 unMergedCmds.add(cmd); |
45 | 43 |
46 //マージ中にユーザから割り込みがあった場合 | 44 //マージ中にユーザから割り込みがあった場合 |
47 if(isMerging()){ | 45 if(isMerging()){ |
48 mergeAgainList.add(cmd); | 46 mergeAgainList.add(cmd); |
99 editor.send(m); | 97 editor.send(m); |
100 } | 98 } |
101 return true; | 99 return true; |
102 } | 100 } |
103 | 101 |
104 public REPCommand prev() { | |
105 return sentCmds.poll(); | |
106 } | |
107 | |
108 private REPCommand createUndo(REPCommand cmd){ | 102 private REPCommand createUndo(REPCommand cmd){ |
109 REPCommand retCmd = new REPCommand(cmd); | 103 REPCommand retCmd = new REPCommand(cmd); |
110 if (cmd.cmd==REP.REPCMD_INSERT) retCmd.cmd=REP.REPCMD_DELETE; | 104 if (cmd.cmd==REP.REPCMD_INSERT) retCmd.cmd=REP.REPCMD_DELETE; |
111 else if (cmd.cmd==REP.REPCMD_DELETE) retCmd.cmd=REP.REPCMD_INSERT; | 105 else if (cmd.cmd==REP.REPCMD_DELETE) retCmd.cmd=REP.REPCMD_INSERT; |
112 return retCmd; | 106 return retCmd; |
213 } | 207 } |
214 | 208 |
215 public boolean isFinished() { | 209 public boolean isFinished() { |
216 if(unMergedCmds.size() > 0) return false; | 210 if(unMergedCmds.size() > 0) return false; |
217 if(sentMergedList.size() > 0) return false; | 211 if(sentMergedList.size() > 0) return false; |
218 if(sentCmds.size() > 0) return false; | |
219 return true; | 212 return true; |
220 } | 213 } |
221 | 214 |
222 public boolean isMerging() { | 215 public boolean isMerging() { |
223 return merge_mode; | 216 return merge_mode; |