/*
 * $Id: RoutingAlgorithm.java,v 1.2 2006/01/27 16:39:03 rampil Exp $
 * Copyright (c) 2006 LOGICAL-PARADOX.ORG
 */
package org.logical_paradox.rss.router.algorithm;
import org.logical_paradox.rss.http.URLPool;

/**
 * RoutingAlgorithm
 * 探索優先順位の最も高いURLを決定するためのアルゴリズムクラスの抽象
 * @author satoshi akabane@logical-paradox.org
 * @version $Revision: 1.2 $
 */
public abstract class RoutingAlgorithm {
	protected RoutingHistory history = null;			// 探索履歴オブジェクト

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

	/**
	 * アルゴリズムの名称を返す
	 */
	public abstract String getAlgorithmName();

	/**
	 * 次に探索するべきURLを返す．
	 * @param l URLプール
	 * @return 次のURL
	 */
	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
