/*
 * $Id: Term.java,v 1.4 2006/02/15 16:23:59 rampil Exp $
 * Copyright (c) 2004 LOGICAL-PARADOX.ORG
 */
package org.logical_paradox.koike.core.parser;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Iterator;

/**
 * キー
 * @author satoshi akabane@logical-paradox.org
 * @version $Revision: 1.4 $
 */
public class Term implements Serializable {
	/** シリアルバージョンUID */
	private static final long serialVersionUID = -8306197056317913560L;
	/** 語 */
	private final String term;
	/** 位置情報の配列 */
	private ArrayList<Integer> locations = new ArrayList<Integer>();

	/**
	 * コンストラクタ
	 * @param t 語
	 */
	public Term(String t) {
		term = t;
	}
	/**
	 * このキーの語を得る
	 * @return 語
	 */
	public String getTerm() {
		return term;
	}
	/**
	 * キーを比較する
	 * 位置情報が違っても，同じキーであればよしとする
	 * @return true:同じ / false:違う
	 */
	public boolean equals(Object obj) {
		if(obj == null || obj instanceof Term == false) {
			return false;
		}
		Term t = (Term)obj;
		return getTerm().equals(t.getTerm());
	}
	/**
	 * このキーのハッシュコードを返す
	 * 位置情報は加味せず，キーが一致していれば一致する
	 */
	public int hashCode() {
		return term.hashCode();
	}
	/**
	 * 位置情報を追加する
	 * @param loc 位置情報
	 */
	public void add(int loc) {
		locations.add(loc);
	}
	/**
	 * 位置情報を削除する
	 * @param loc 位置情報
	 */
	public void remove(int loc) {
		locations.remove(loc);
	}
	/**
	 * 位置情報へのアクセサを返す
	 * @return イテレータ(要素型:Integer)
	 */
	public Iterator<Integer> iterator() {
		return locations.iterator();
	}
}
