/**
 * RoutingAlgorithm
 * 探索優先順位の最も高いURLを決定するためのアルゴリズムクラスの抽象
 */
package org.logical_paradox.rss.router.algorithm;
import org.logical_paradox.rss.http.URLPool;

public abstract class RoutingAlgorithm {
	protected RoutingHistory history = null;			// 探索履歴オブジェクト

	/**
	 * コンストラクタ
	 */
	public RoutingAlgorithm() {
		history = new RoutingHistory();
	}

	// このメソッドを実装すること
	/**
	 * アルゴリズムの名称を返す
	 */
	public abstract String getAlgorithmName();

	// このメソッドを実装すること
	public abstract String nextURL( URLPool l );

	/**
	 * 探索履歴から特定のURLを削除する
	 */
	public void removeFromHistory( String url ) {
		history.remove( url );
	}

	/**
	 * 探索履歴を返す
	 */
	public RoutingHistory getHistory() {
		final RoutingHistory r = new RoutingHistory( history );
		return r;
	}
}

// end of RoutingAlgorithm.java
