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

GUIless test routine.
author kono
date Sat, 27 Sep 2008 22:55:13 +0900
parents e44c1773d121
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.REPCommand;
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
7
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
8 public abstract class REPCommandOptimizer {
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
9
249
e44c1773d121 *** empty log message ***
kono
parents: 223
diff changeset
10 // なんで、Interfaceじゃないの?
e44c1773d121 *** empty log message ***
kono
parents: 223
diff changeset
11 // Interface じゃないせいで、NullOptimizer でも余計なコピーが生じている。
e44c1773d121 *** empty log message ***
kono
parents: 223
diff changeset
12 // 本来、最適化はコピーしながら作業するので、余計にコピーするのは良くない。
e44c1773d121 *** empty log message ***
kono
parents: 223
diff changeset
13 // まぁ、この方が安全臭いことはあるかも知れないけど。kono
e44c1773d121 *** empty log message ***
kono
parents: 223
diff changeset
14
223
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
15 // リストとその中身のREPCommandをコピーするため. finalでよい?
249
e44c1773d121 *** empty log message ***
kono
parents: 223
diff changeset
16
e44c1773d121 *** empty log message ***
kono
parents: 223
diff changeset
17 // final だとoverride できないので、このコピーを外すことは誰にも出来なくなって
e44c1773d121 *** empty log message ***
kono
parents: 223
diff changeset
18 // しまう。kono
223
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
19 public final List<REPCommand> optimize(List<REPCommand> cmdlist){
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
20 List<REPCommand> copied = new LinkedList<REPCommand>();
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
21 for (REPCommand cmd: cmdlist){
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
22 // ちゃんと new しないといけません!
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
23 copied.add(new REPCommand(cmd));
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
24 }
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
25 return optimize0(copied);
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
26 }
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
27
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
28 // 継承したクラスでこれを実装してください 直接cmdlistを返すのもあり.
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
29 abstract protected List<REPCommand> optimize0(List<REPCommand> cmdlist);
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
30
3680d8357429 Optimizer of REPCommand
kent
parents:
diff changeset
31 }