annotate rep/optimizers/DeleteInsertOptimizer.java @ 368:335f685ac658

*** empty log message ***
author tkaito
date Tue, 21 Oct 2008 20:11:09 +0900
parents 6ea3aa6c795f
children
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 *
348
tkaito
parents: 331
diff changeset
11 * @author Tagano
223
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
12 *
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
13 */
331
f9fa876d3539 Optimizer test
kono
parents: 271
diff changeset
14 public class DeleteInsertOptimizer implements REPCommandOptimizer {
223
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
15
331
f9fa876d3539 Optimizer test
kono
parents: 271
diff changeset
16 public List<REPCommand> optimize(List<REPCommand> cmdlist){
f9fa876d3539 Optimizer test
kono
parents: 271
diff changeset
17 List<REPCommand> output = new LinkedList<REPCommand>();
f9fa876d3539 Optimizer test
kono
parents: 271
diff changeset
18 for (REPCommand cmd: cmdlist){
f9fa876d3539 Optimizer test
kono
parents: 271
diff changeset
19 if (cmd.cmd==REP.REPCMD_NOP) continue;
f9fa876d3539 Optimizer test
kono
parents: 271
diff changeset
20 output.add(0,new REPCommand(cmd));
f9fa876d3539 Optimizer test
kono
parents: 271
diff changeset
21 }
223
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
22 for(int i = 0; i < output.size(); i++){
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
23 REPCommand r = output.get(i);
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
24 switch(r.cmd){
271
kono
parents: 223
diff changeset
25 case REPCMD_INSERT:
223
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
26 break;
271
kono
parents: 223
diff changeset
27 case REPCMD_DELETE:
223
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
28 optimizedAdd(output,r,i);
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
29 break;
348
tkaito
parents: 331
diff changeset
30 case REPCMD_NOP:
tkaito
parents: 331
diff changeset
31 output.remove(r);
tkaito
parents: 331
diff changeset
32 i--;
tkaito
parents: 331
diff changeset
33 break;
223
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
34 }
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
35 }
331
f9fa876d3539 Optimizer test
kono
parents: 271
diff changeset
36 java.util.Collections.reverse(output);
f9fa876d3539 Optimizer test
kono
parents: 271
diff changeset
37 return output;
223
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
38
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
39 }
331
f9fa876d3539 Optimizer test
kono
parents: 271
diff changeset
40
223
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
41 private void optimizedAdd(List<REPCommand> output, REPCommand r, int ln) {
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
42 int lineno = r.lineno;
354
6ea3aa6c795f *** empty log message ***
tkaito
parents: 348
diff changeset
43 for(int i = ln+1; i < output.size(); i++){
223
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
44 REPCommand s = output.get(i);
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
45 if(s.cmd==REP.REPCMD_INSERT) {
368
335f685ac658 *** empty log message ***
tkaito
parents: 354
diff changeset
46 if(s.lineno <= lineno){
223
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
47 lineno --;
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
48 }else if(s.lineno == lineno){
348
tkaito
parents: 331
diff changeset
49
354
6ea3aa6c795f *** empty log message ***
tkaito
parents: 348
diff changeset
50 lineNumberCorrection(output,s.lineno,i,ln);
223
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
51 output.remove(r);
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
52 output.remove(s);
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
53 ln--;
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
54 break;
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
55 }
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
56 }else if(s.cmd==REP.REPCMD_DELETE){
354
6ea3aa6c795f *** empty log message ***
tkaito
parents: 348
diff changeset
57 if(s.lineno <= lineno){
223
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
58 lineno ++;
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
59 }
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
60 }else{
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
61 System.out.println("There are no such commands.");
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
62 }
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
63 }
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
64 }
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
65
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
66 private void lineNumberCorrection(List<REPCommand> opt, int ln, int count, int r){
354
6ea3aa6c795f *** empty log message ***
tkaito
parents: 348
diff changeset
67 for(int i = r+1; i < count; i++){
223
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
68 REPCommand o = opt.get(i);
348
tkaito
parents: 331
diff changeset
69 if(o.lineno == 0){
368
335f685ac658 *** empty log message ***
tkaito
parents: 354
diff changeset
70 }else if(ln <= o.lineno){
348
tkaito
parents: 331
diff changeset
71 o.lineno -= 1;
tkaito
parents: 331
diff changeset
72 }
223
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
73 }
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 }