view rep/optimizers/REPCommandOptimizer.java @ 249:e44c1773d121

*** empty log message ***
author kono
date Wed, 03 Sep 2008 19:35:41 +0900
parents 3680d8357429
children f9fa876d3539
line wrap: on
line source

package rep.optimizers;

import java.util.LinkedList;
import java.util.List;

import rep.REPCommand;

public abstract class REPCommandOptimizer {

	// なんで、Interfaceじゃないの?
	// Interface じゃないせいで、NullOptimizer でも余計なコピーが生じている。
	// 本来、最適化はコピーしながら作業するので、余計にコピーするのは良くない。
	// まぁ、この方が安全臭いことはあるかも知れないけど。kono
	
	// リストとその中身のREPCommandをコピーするため. finalでよい?
	
	// final だとoverride できないので、このコピーを外すことは誰にも出来なくなって
	// しまう。kono
	public final List<REPCommand> optimize(List<REPCommand> cmdlist){
		List<REPCommand> copied = new LinkedList<REPCommand>();
		for (REPCommand cmd: cmdlist){
			// ちゃんと new しないといけません!
			copied.add(new REPCommand(cmd));
		}
		return optimize0(copied);
	}

	// 継承したクラスでこれを実装してください 直接cmdlistを返すのもあり.
	abstract protected List<REPCommand> optimize0(List<REPCommand> cmdlist);

}