223
|
1 package rep.optimizers;
|
|
2
|
|
3 import java.util.LinkedList;
|
|
4 import java.util.List;
|
|
5
|
|
6 import rep.REPCommand;
|
|
7
|
|
8 public abstract class REPCommandOptimizer {
|
|
9
|
249
|
10 // なんで、Interfaceじゃないの?
|
|
11 // Interface じゃないせいで、NullOptimizer でも余計なコピーが生じている。
|
|
12 // 本来、最適化はコピーしながら作業するので、余計にコピーするのは良くない。
|
|
13 // まぁ、この方が安全臭いことはあるかも知れないけど。kono
|
|
14
|
223
|
15 // リストとその中身のREPCommandをコピーするため. finalでよい?
|
249
|
16
|
|
17 // final だとoverride できないので、このコピーを外すことは誰にも出来なくなって
|
|
18 // しまう。kono
|
223
|
19 public final List<REPCommand> optimize(List<REPCommand> cmdlist){
|
|
20 List<REPCommand> copied = new LinkedList<REPCommand>();
|
|
21 for (REPCommand cmd: cmdlist){
|
|
22 // ちゃんと new しないといけません!
|
|
23 copied.add(new REPCommand(cmd));
|
|
24 }
|
|
25 return optimize0(copied);
|
|
26 }
|
|
27
|
|
28 // 継承したクラスでこれを実装してください 直接cmdlistを返すのもあり.
|
|
29 abstract protected List<REPCommand> optimize0(List<REPCommand> cmdlist);
|
|
30
|
|
31 }
|