annotate rep/handler/Translator.java @ 397:149c9a53fc37

half done ACK protocol
author one
date Sun, 23 Nov 2008 16:35:20 +0900
parents 3b0a5a55e3ee
children de4ef4313adc
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
390
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
1 package rep.handler;
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
2
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
3 import java.util.Collection;
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
4 import java.util.Comparator;
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
5 import java.util.LinkedList;
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
6 import java.util.List;
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
7 import java.util.TreeSet;
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
8
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
9 import rep.REP;
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
10 import rep.REPCommand;
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
11 import rep.optimizers.REPCommandOptimizer;
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
12
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
13 public class Translator {
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
14 public int eid;
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
15
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
16 public REPCommandOptimizer optimizer;
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
17 private LinkedList<REPCommand> unMergedCmds;
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
18 public LinkedList<REPCommand> sentMergedList;
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
19 private LinkedList<REPCommand> mergeAgainList;
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
20 boolean merge_mode = false;
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
21
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
22 public Translator(int _eid,REPCommandOptimizer opt){
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
23 eid = _eid;
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
24 optimizer = opt;
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
25 unMergedCmds = new LinkedList<REPCommand>();
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
26 mergeAgainList = new LinkedList<REPCommand>();
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
27 sentMergedList = new LinkedList<REPCommand>();
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
28 }
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
29
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
30 /**
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
31 * New command from an editor
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
32 * The command is sent to the next editor
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
33 * @param cmd
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
34 * @return translated command.
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
35 */
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
36 public REPCommand transSendCmd(REPCommand cmd){
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
37 assert(cmd.eid==eid);
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
38 unMergedCmds.add(cmd);
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
39
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
40 //マージ中にユーザから割り込みがあった場合
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
41 if(isMerging()){
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
42 mergeAgainList.add(cmd);
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
43 }
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
44
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
45 return cmd;
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
46 }
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
47 /**
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
48 * My command is returned from the session ring, and START_MERGE_ACK
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
49 * is returned. At this
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
50 * stage my writeQueue is empty, our editor is waiting for me.
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
51 * Start merge process.
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
52 * @param cmd
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
53 */
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
54 public boolean catchOwnCommand(REPNode editor){
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
55 LinkedList<REPCommand> output = new LinkedList<REPCommand>();
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
56 LinkedList<REPCommand> cmds = new LinkedList<REPCommand>();
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
57 //スタック上にあるコマンドを全部undoコマンドにする
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
58 while ( !unMergedCmds.isEmpty() ){
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
59 REPCommand cmd0 = unMergedCmds.removeLast();
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
60 output.add( createUndo(cmd0) );
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
61 cmds.add(cmd0);
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
62 }
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
63
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
64 /* 必要な分だけソートして返却用のリストに追加 */
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
65 output.addAll( sortCmds(cmds) );
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
66
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
67 /* 残ったコマンドも再び実行させるが、まだマージされてないのでunMergedにも入れる */
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
68 output.addAll(cmds);
391
one@firefly.cr.ie.u-ryukyu.ac.jp
parents: 390
diff changeset
69 unMergedCmds.addAll(cmds);
390
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
70 return optimizedSend(editor,output);
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
71 }
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
72
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
73 /**
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
74 * Sent optimized merged command list
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
75 * @param editor
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
76 * @param output
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
77 * @return if any sent commands output
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
78 */
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
79 public boolean optimizedSend(REPNode editor, LinkedList<REPCommand> output) {
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
80 List<REPCommand> output1 = optimizer.optimize(output);
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
81 if (output1.size()==0) {
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
82 merge_mode = false;
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
83 return false;
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
84 }
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
85 for(REPCommand c:output1) {
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
86 REPCommand m = new REPCommand(c);
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
87 m.setEID(REP.MERGE_EID.id);
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
88 m.setSEQID(editor.seq());
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
89 sentMergedList.add(m);
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
90 editor.send(m);
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
91 }
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
92 merge_mode = true;
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
93 return true;
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
94 }
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
95
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
96 private REPCommand createUndo(REPCommand cmd){
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
97 REPCommand retCmd = new REPCommand(cmd);
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
98 if (cmd.cmd==REP.REPCMD_INSERT) retCmd.cmd=REP.REPCMD_DELETE;
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
99 else if (cmd.cmd==REP.REPCMD_DELETE) retCmd.cmd=REP.REPCMD_INSERT;
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
100 return retCmd;
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
101 }
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
102
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
103 class REPCommandComparator implements Comparator<REPCommand>{
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
104
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
105 public int compare(REPCommand o1, REPCommand o2) {
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
106
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
107 if ( o2.lineno > o1.lineno ) return 1;
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
108 else if ( o2.lineno < o1.lineno
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
109 || o2.eid > o1.eid )
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
110 return -1;
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
111
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
112 return 1;
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
113 }
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
114
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
115 }
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
116
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
117 private Collection<REPCommand> sortCmds(LinkedList<REPCommand> cmds) {
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
118 TreeSet<REPCommand> sortedCmds1 = new TreeSet<REPCommand>(new REPCommandComparator());
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
119 int top;
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
120 int prevEid=-1;
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
121 while ( -1 != (top=getPrecedence(cmds, prevEid+1)) ){
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
122 REPCommand tmp = cmds.remove(top);
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
123 sortedCmds1.add(tmp);
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
124 prevEid = tmp.eid;
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
125 }
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
126
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
127 return sortedCmds1;
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
128 }
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
129
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
130 /* search cmd. ordering by min EID that is lower lowEid and min SEQ. */
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
131 private int getPrecedence(LinkedList<REPCommand> cmds, int lowEid) {
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
132 int cEid, cSeq;
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
133 cEid=cSeq=Integer.MAX_VALUE;
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
134 int ret=-1;
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
135 for (int i=0; i<cmds.size(); i++){
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
136 REPCommand c = cmds.get(i);
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
137 if ( c.eid<lowEid ) continue;
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
138 else if ( c.eid>cEid ) continue;
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
139 else if ( c.eid==cEid ) {
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
140 if ( c.seq>cSeq ) continue;
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
141 cSeq=c.seq;
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
142 ret = i;
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
143 } else { /* tmp.eid<cEid */
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
144 cEid = c.eid;
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
145 cSeq = c.seq;
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
146 ret = i;
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
147 }
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
148 }
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
149 return ret;
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
150 }
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
151
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
152 /**
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
153 * Translate Command cmd that was received from SeMa.
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
154 * @param cmd the command to be translated.
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
155 * @return translated commannd.
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
156 */
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
157 public void transReceiveCmd(REPNode nextEditor,REPCommand cmd){
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
158 assert (cmd.eid != eid);
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
159 unMergedCmds.add(cmd);
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
160 }
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
161
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
162 public void setEid(int _eid){
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
163 eid = _eid;
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
164 }
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
165
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
166 public boolean checkMergeConflict(REPCommand command) {
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
167 REPCommand prev = sentMergedList.remove();
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
168 assert (prev.seq==command.seq);
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
169
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
170 if(mergeAgainList.size() > 0){
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
171 mergeAgainList.add(command);
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
172 return true;
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
173 }
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
174 if(sentMergedList.size()==0) {
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
175 merge_mode=false;
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
176 }
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
177 return false;
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
178 }
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
179
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
180 public void getMergeAgain(REPNode editor) {
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
181 LinkedList<REPCommand> returnCommand = new LinkedList<REPCommand>();
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
182 for(int i = 0; i < mergeAgainList.size(); i++){
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
183 //eid = REP.MEGE_EID
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
184 returnCommand.add(createUndo(mergeAgainList.get(mergeAgainList.size() - i -1)));
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
185 }
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
186 for(REPCommand command : mergeAgainList){
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
187 if(command.eid == REP.MERGE_EID.id){
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
188 returnCommand.add(command);
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
189 }
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
190 }
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
191 for(REPCommand command : mergeAgainList){
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
192 if(command.eid == eid){
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
193 command.eid = REP.MERGE_EID.id;
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
194 returnCommand.add(command);
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
195 }
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
196 }
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
197 mergeAgainList.clear();
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
198 optimizedSend(editor, returnCommand);
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
199 }
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
200
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
201 public boolean isFinished() {
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
202 if(unMergedCmds.size() > 0) return false;
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
203 if(sentMergedList.size() > 0) return false;
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
204 return true;
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
205 }
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
206
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
207 public boolean isMerging() {
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
208 return merge_mode;
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
209 }
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
210
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
211 public void startMerge(REPCommand cmd) {
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
212 merge_mode = true;
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
213 }
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
214
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
215 public void mergeAck() {
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
216 }
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
217
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
218
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
219
one@firefly.cr.ie.u-ryukyu.ac.jp
parents:
diff changeset
220 }