/*
 * KeywordLocationを配列として管理するコレクション
 */
package org.logical_paradox.fts;

import java.util.Iterator;

import org.logical_paradox.common.vrm.Record;

/**
 * KeywordLocationを配列で管理するコレクション
 * このコレクション自体もRecordのサブクラスとして，VRMで扱うことができる
 * 
 * @author satoshi akabane@logical-paradox.org
 * @version 1.0
 */
public class KeywordLocationArray extends Record {
	/**
	 * コンストラクタ
	 */
	public KeywordLocationArray() {
		o = new KeywordLocationArrayListByteStream();
	}
	/**
	 * コンストラクタ
	 * @param bstream バイト列
	 */
	public KeywordLocationArray(byte[] bstream) {
		super(bstream);
	}
	/**
	 * コンストラクタ
	 * @param locations 位置情報の配列
	 */
	public KeywordLocationArray(KeywordLocation[] locations) {
		add(locations);
	}
	/**
	 * リストに位置情報を追加する
	 * @param location 位置情報
	 */
	public void add(KeywordLocation location) {
		((KeywordLocationArrayListByteStream)o).add(location);
	}
	/**
	 * リストに位置情報を追加する
	 * 配列の内容を全て追加する
	 * @param locations 追加する位置情報の配列
	 */
	public void add(KeywordLocation[] locations) {
		for(int i = 0; i < locations.length; i++) {
			add(locations[i]);
		}
	}
	/**
	 * リストに位置情報を追加する
	 * 指定された位置情報配列を全て追加する
	 * @param locations 位置情報配列
	 */
	public void add(KeywordLocationArray locations) {
		add(locations.toArray());
	}
	/**
	 * 格納されている位置情報のイテレータを返す
	 * @return イテレータ
	 */
	public Iterator iterator() {
		return ((KeywordLocationArrayListByteStream)o).iterator();
	}
	/**
	 * 格納されている位置情報を配列で返す
	 * @return 配列
	 */
	public KeywordLocation[] toArray() {
		return (KeywordLocation[])((KeywordLocationArrayListByteStream)o).toArray(new KeywordLocation[0]);
	}

	/**
	 * レコードサイズを返す
	 * @return int レコードサイズ
	 */
	public int getRecordSize() {
		KeywordLocation[] locations = toArray();
		int size = 4;				// 配列の要素数を格納するためのintのサイズ
		for(int i = 0; i < locations.length; i++) {
			size += locations[i].getRecordSize();
		}
		
		return size;
	}

	/**
	 * レコード値を比較する
	 * @param o 比較対象
	 * @return true:同じ / false:違う
	 */
	public boolean equals(Object o) {
		// TODO 自動生成されたメソッド・スタブ
		return false;
	}

	/**
	 * バイト列から値オブジェクトを復元する
	 * このメソッドは，派生クラスで実装する
	 * @param bstream バイト列
	 * @throws IllegalArgumentException バイト列からの値オブジェクトの復元に失敗した
	 */
	protected void createObjectFromByteStream(byte[] bstream) throws IllegalArgumentException {
		o = new KeywordLocationArrayListByteStream(bstream);
	}
}
