comparison rep/optimizers/REPCommandOptimizer.java @ 331:f9fa876d3539

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