annotate rep/optimizers/DeleteInsertOptimizer.java @ 281:c3969dd625b2

GUIless test routine.
author kono
date Sat, 27 Sep 2008 22:55:13 +0900
parents 5b7abc22e61a
children f9fa876d3539
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
223
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
1 package rep.optimizers;
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
2
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
3 import java.util.LinkedList;
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
4 import java.util.List;
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
5
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
6 import rep.REP;
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
7 import rep.REPCommand;
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
8
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
9 /**
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
10 *
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
11 * @author Takano
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
12 *
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
13 */
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
14 public class DeleteInsertOptimizer extends REPCommandOptimizer {
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
15
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
16 // optimize メソッドから呼ばれます
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
17 protected List<REPCommand> optimize0(List<REPCommand> inp){
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
18 List<REPCommand> output;
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
19 output = reverse(inp);
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
20
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
21 for(int i = 0; i < output.size(); i++){
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
22 REPCommand r = output.get(i);
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
23 switch(r.cmd){
271
kono
parents: 223
diff changeset
24 case REPCMD_INSERT:
223
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
25 break;
271
kono
parents: 223
diff changeset
26 case REPCMD_DELETE:
223
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
27 optimizedAdd(output,r,i);
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
28 break;
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
29 }
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
30 }
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
31 return reverse(output);
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
32
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
33 }
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
34
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
35 private List<REPCommand> reverse(List<REPCommand> outp) {
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
36 LinkedList<REPCommand> reverse = new LinkedList<REPCommand>();
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
37 for(REPCommand r : outp){
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
38 reverse.addFirst(r);
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
39 }
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
40 return reverse;
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
41 }
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
42 private void optimizedAdd(List<REPCommand> output, REPCommand r, int ln) {
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
43 int lineno = r.lineno;
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
44 int minln = output.size();
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
45 for(int i = ln; i < output.size(); i++){
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
46 REPCommand s = output.get(i);
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
47 if(s.cmd==REP.REPCMD_INSERT) {
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
48 if(s.lineno < lineno){
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
49 lineno --;
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
50 }else if(s.lineno == lineno){
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
51 if(s.lineno < minln){
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
52 minln = s.lineno;
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
53 }
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
54 lineNumberCorrection(output,minln,i,ln);
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
55 output.remove(r);
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
56 output.remove(s);
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
57 ln--;
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
58 break;
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
59 }
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
60 }else if(s.cmd==REP.REPCMD_DELETE){
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
61 if(s.lineno < lineno){
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
62 lineno ++;
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
63 }
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
64 }else{
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
65 System.out.println("There are no such commands.");
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
66 }
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
67 }
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
68 }
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
69
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
70 private void lineNumberCorrection(List<REPCommand> opt, int ln, int count, int r){
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
71 for(int i = r; i < count; i++){
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
72 REPCommand o = opt.get(i);
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
73 if(ln < o.lineno) o.lineno -= 1;
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
74 }
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
75 }
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
76
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
77
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
78 }