/*
 * Copyright (c) 2003, Morpho Project.
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 * 1. Redistributions of source code must retain the above copyright notice,
 *    this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright notice,
 *    this list of conditions and the following disclaimer in the documentation
 *    and/or other materials provided with the distribution.
 * 3. Neither the name of the Morpho Project nor the names of its contributors
 *    may be used to endorse or promote products derived from this software
 *    without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */
package jp.morpho.util;

/**
 * @author Kumiko Hiroi
 */
public interface PrimitiveHolderList
	extends java.util.List
{

	/**
	 * <P>
	 * リスト内の指定された位置にある要素を入力ストリームとして返します。
	 * </P>
	 * @param index 返される要素のインデックス
	 * @return リスト内の指定された位置にある要素
	 */
	public java.io.InputStream getInputStream(int index);

	/**
	 * <P>
	 * リスト内の指定された位置にある要素を、指定された入力ストリームに置き換えます。
	 * </P>
	 * @param index 置換される要素のインデックス
	 * @param element 指定された位置に格納される要素
	 */
	public void setInputStream(int index, java.io.InputStream element);

	/**
	 * <P>
	 * リスト内の指定された位置に、指定された入力ストリームを挿入します。
	 * </P>
	 * @param index 指定の要素が挿入されるインデックス
	 * @param element 挿入される要素
	 */
	public void addInputStream(int index, java.io.InputStream element);

	/**
	 * <P>
	 * 指定された入力ストリームをリストの最後に追加します。
	 * </P>
	 * @param element リストに追加される要素
	 * @return この呼び出しの結果、リストが変更された場合は true 
	 */
	public boolean addInputStream(java.io.InputStream element);

	/**
	 * <P>
	 * リスト内の指定された位置にある要素を java.math.BigDecimal オブジェクトとして返します。
	 * </P>
	 * @param index 返される要素のインデックス
	 * @return リスト内の指定された位置にある要素
	 */
	public java.math.BigDecimal getBigDecimal(int index);

	/**
	 * <P>
	 * リスト内の指定された位置にある要素を、指定された java.math.BigDecimal オブジェクトに置き換えます。
	 * </P>
	 * @param index 置換される要素のインデックス
	 * @param element 指定された位置に格納される要素
	 */
	public void setBigDecimal(int index, java.math.BigDecimal element);

	/**
	 * <P>
	 * リスト内の指定された位置に、指定された java.math.BigDecimal オブジェクトを挿入します。
	 * </P>
	 * @param index 指定の要素が挿入されるインデックス
	 * @param element 挿入される要素
	 */
	public void addBigDecimal(int index, java.math.BigDecimal element);

	/**
	 * <P>
	 * 指定された java.math.BigDecimal オブジェクトをリストの最後に追加します。
	 * </P>
	 * @param element リストに追加される要素
	 * @return この呼び出しの結果、リストが変更された場合は true 
	 */
	public boolean addBigDecimal(java.math.BigDecimal element);

	/**
	 * <P>
	 * リスト内の指定された位置にある要素を java.math.BigInteger オブジェクトとして返します。
	 * </P>
	 * @param index 返される要素のインデックス
	 * @return リスト内の指定された位置にある要素
	 */
	public java.math.BigInteger getBigInteger(int index);

	/**
	 * <P>
	 * リスト内の指定された位置にある要素を、指定された java.math.BigInteger オブジェクトに置き換えます。
	 * </P>
	 * @param index 置換される要素のインデックス
	 * @param element 指定された位置に格納される要素
	 */
	public void setBigInteger(int index, java.math.BigInteger element);

	/**
	 * <P>
	 * リスト内の指定された位置に、指定された java.math.BigInteger オブジェクトを挿入します。
	 * </P>
	 * @param index 指定の要素が挿入されるインデックス
	 * @param element 挿入される要素
	 */
	public void addBigInteger(int index, java.math.BigInteger element);

	/**
	 * <P>
	 * 指定された java.math.BigInteger オブジェクトをリストの最後に追加します。
	 * </P>
	 * @param element リストに追加される要素
	 * @return この呼び出しの結果、リストが変更された場合は true 
	 */
	public boolean addBigInteger(java.math.BigInteger element);

	/**
	 * <P>
	 * リスト内の指定された位置にある要素を Java プログラミング言語の boolean として返します。
	 * </P>
	 * @param index 返される要素のインデックス
	 * @return リスト内の指定された位置にある要素
	 */
	public boolean getBoolean(int index);

	/**
	 * <P>
	 * リスト内の指定された位置にある要素を、指定された boolean 値に置き換えます。
	 * </P>
	 * @param index 置換される要素のインデックス
	 * @param element 指定された位置に格納される要素
	 */
	public void setBoolean(int index, boolean element);

	/**
	 * <P>
	 * リスト内の指定された位置に、指定された boolean 値を挿入します。
	 * </P>
	 * @param index 指定の要素が挿入されるインデックス
	 * @param element 挿入される要素
	 */
	public void addBoolean(int index, boolean element);

	/**
	 * <P>
	 * 指定された boolean 値をリストの最後に追加します。
	 * </P>
	 * @param element リストに追加される要素
	 * @return この呼び出しの結果、リストが変更された場合は true 
	 */
	public boolean addBoolean(boolean element);

	/**
	 * <P>
	 * リスト内の指定された位置にある要素を Java プログラミング言語の byte として返します。
	 * </P>
	 * @param index 返される要素のインデックス
	 * @return リスト内の指定された位置にある要素
	 */
	public byte getByte(int index);

	/**
	 * <P>
	 * リスト内の指定された位置にある要素を、指定された byte 値に置き換えます。
	 * </P>
	 * @param index 置換される要素のインデックス
	 * @param element 指定された位置に格納される要素
	 */
	public void setByte(int index, byte element);

	/**
	 * <P>
	 * リスト内の指定された位置に、指定された byte 値を挿入します。
	 * </P>
	 * @param index 指定の要素が挿入されるインデックス
	 * @param element 挿入される要素
	 */
	public void addByte(int index, byte element);

	/**
	 * <P>
	 * 指定された byte 値をリストの最後に追加します。
	 * </P>
	 * @param element リストに追加される要素
	 * @return この呼び出しの結果、リストが変更された場合は true 
	 */
	public boolean addByte(byte element);

	/**
	 * <P>
	 * リスト内の指定された位置にある要素を Java プログラミング言語の byte 配列として返します。
	 * </P>
	 * @param index 返される要素のインデックス
	 * @return リスト内の指定された位置にある要素
	 */
	public byte[] getBytes(int index);

	/**
	 * <P>
	 * リスト内の指定された位置にある要素を、指定された byte 配列に置き換えます。
	 * </P>
	 * @param index 置換される要素のインデックス
	 * @param element 指定された位置に格納される要素
	 */
	public void setBytes(int index, byte[] element);

	/**
	 * <P>
	 * リスト内の指定された位置に、指定された byte 配列を挿入します。
	 * </P>
	 * @param index 指定の要素が挿入されるインデックス
	 * @param element 挿入される要素
	 */
	public void addBytes(int index, byte[] element);

	/**
	 * <P>
	 * 指定された byte 配列をリストの最後に追加します。
	 * </P>
	 * @param element リストに追加される要素
	 * @return この呼び出しの結果、リストが変更された場合は true 
	 */
	public boolean addBytes(byte[] element);

	/**
	 * <P>
	 * リスト内の指定された位置にある要素を Java プログラミング言語の char として返します。
	 * </P>
	 * @param index 返される要素のインデックス
	 * @return リスト内の指定された位置にある要素
	 */
	public char getChar(int index);

	/**
	 * <P>
	 * リスト内の指定された位置にある要素を、指定された char 値に置き換えます。
	 * </P>
	 * @param index 置換される要素のインデックス
	 * @param element 指定された位置に格納される要素
	 */
	public void setChar(int index, char element);

	/**
	 * <P>
	 * リスト内の指定された位置に、指定された char 値を挿入します。
	 * </P>
	 * @param index 指定の要素が挿入されるインデックス
	 * @param element 挿入される要素
	 */
	public void addChar(int index, char element);

	/**
	 * <P>
	 * 指定された char 値をリストの最後に追加します。
	 * </P>
	 * @param element リストに追加される要素
	 * @return この呼び出しの結果、リストが変更された場合は true 
	 */
	public boolean addChar(char element);

	/**
	 * <P>
	 * リスト内の指定された位置にある要素を java.io.Reader オブジェクトとして返します。
	 * </P>
	 * @param index 返される要素のインデックス
	 * @return リスト内の指定された位置にある要素
	 */
	public java.io.Reader getReader(int index);

	/**
	 * <P>
	 * リスト内の指定された位置にある要素を、指定された java.io.Reader オブジェクトに置き換えます。
	 * </P>
	 * @param index 置換される要素のインデックス
	 * @param element 指定された位置に格納される要素
	 */
	public void setReader(int index, java.io.Reader element);

	/**
	 * <P>
	 * リスト内の指定された位置に、指定された java.io.Reader オブジェクトを挿入します。
	 * </P>
	 * @param index 指定の要素が挿入されるインデックス
	 * @param element 挿入される要素
	 */
	public void addReader(int index, java.io.Reader element);

	/**
	 * <P>
	 * 指定された java.io.Reader オブジェクトをリストの最後に追加します。
	 * </P>
	 * @param element リストに追加される要素
	 * @return この呼び出しの結果、リストが変更された場合は true 
	 */
	public boolean addReader(java.io.Reader element);

	/**
	 * <P>
	 * リスト内の指定された位置にある要素を java.util.Date オブジェクトとして返します。
	 * </P>
	 * @param index 返される要素のインデックス
	 * @return リスト内の指定された位置にある要素
	 */
	public java.util.Date getDate(int index);

	/**
	 * <P>
	 * リスト内の指定された位置にある要素の文字列表現を pattern で指定した日付／時刻パターンで解析して、java.util.Date オブジェクトとして返します。
	 * </P>
	 * @param index 返される要素のインデックス
	 * @param pattern 日付／時刻パターン
	 * @return リスト内の指定された位置にある要素
	 */
	public java.util.Date parseDate(int index, String pattern);

	/**
	 * <P>
	 * リスト内の指定された位置にある要素を、指定された java.util.Date 値に置き換えます。
	 * </P>
	 * @param index 置換される要素のインデックス
	 * @param element 指定された位置に格納される要素
	 */
	public void setDate(int index, java.util.Date element);

	/**
	 * <P>
	 * リスト内の指定された位置に、指定された java.util.Date 値を挿入します。
	 * </P>
	 * @param index 指定の要素が挿入されるインデックス
	 * @param element 挿入される要素
	 */
	public void addDate(int index, java.util.Date element);

	/**
	 * <P>
	 * 指定された java.util.Date 値をリストの最後に追加します。
	 * </P>
	 * @param element リストに追加される要素
	 * @return この呼び出しの結果、リストが変更された場合は true 
	 */
	public boolean addDate(java.util.Date element);

	/**
	 * <P>
	 * リスト内の指定された位置にある要素を Java プログラミング言語の double として返します。
	 * </P>
	 * @param index 返される要素のインデックス
	 * @return リスト内の指定された位置にある要素
	 */
	public double getDouble(int index);

	/**
	 * <P>
	 * リスト内の指定された位置にある要素を、指定された double 値に置き換えます。
	 * </P>
	 * @param index 置換される要素のインデックス
	 * @param element 指定された位置に格納される要素
	 */
	public void setDouble(int index, double element);

	/**
	 * <P>
	 * リスト内の指定された位置に、指定された double 値を挿入します。
	 * </P>
	 * @param index 指定の要素が挿入されるインデックス
	 * @param element 挿入される要素
	 */
	public void addDouble(int index, double element);

	/**
	 * <P>
	 * 指定された double 値をリストの最後に追加します。
	 * </P>
	 * @param element リストに追加される要素
	 * @return この呼び出しの結果、リストが変更された場合は true 
	 */
	public boolean addDouble(double element);

	/**
	 * <P>
	 * リスト内の指定された位置にある要素を Java プログラミング言語の float として返します。
	 * </P>
	 * @param index 返される要素のインデックス
	 * @return リスト内の指定された位置にある要素
	 */
	public float getFloat(int index);

	/**
	 * <P>
	 * リスト内の指定された位置にある要素を、指定された float 値に置き換えます。
	 * </P>
	 * @param index 置換される要素のインデックス
	 * @param element 指定された位置に格納される要素
	 */
	public void setFloat(int index, float element);

	/**
	 * <P>
	 * リスト内の指定された位置に、指定された float 値を挿入します。
	 * </P>
	 * @param index 指定の要素が挿入されるインデックス
	 * @param element 挿入される要素
	 */
	public void addFloat(int index, float element);

	/**
	 * <P>
	 * 指定された float 値をリストの最後に追加します。
	 * </P>
	 * @param element リストに追加される要素
	 * @return この呼び出しの結果、リストが変更された場合は true 
	 */
	public boolean addFloat(float element);

	/**
	 * <P>
	 * リスト内の指定された位置にある要素を Java プログラミング言語の int として返します。
	 * </P>
	 * @param index 返される要素のインデックス
	 * @return リスト内の指定された位置にある要素
	 */
	public int getInt(int index);

	/**
	 * <P>
	 * リスト内の指定された位置にある要素を、指定された int 値に置き換えます。
	 * </P>
	 * @param index 置換される要素のインデックス
	 * @param element 指定された位置に格納される要素
	 */
	public void setInt(int index, int element);

	/**
	 * <P>
	 * リスト内の指定された位置に、指定された int 値を挿入します。
	 * </P>
	 * @param index 指定の要素が挿入されるインデックス
	 * @param element 挿入される要素
	 */
	public void addInt(int index, int element);

	/**
	 * <P>
	 * 指定された int 値をリストの最後に追加します。
	 * </P>
	 * @param element リストに追加される要素
	 * @return この呼び出しの結果、リストが変更された場合は true 
	 */
	public boolean addInt(int element);

	/**
	 * <P>
	 * リスト内の指定された位置にある要素を Java プログラミング言語の long として返します。
	 * </P>
	 * @param index 返される要素のインデックス
	 * @return リスト内の指定された位置にある要素
	 */
	public long getLong(int index);

	/**
	 * <P>
	 * リスト内の指定された位置にある要素を、指定された long 値に置き換えます。
	 * </P>
	 * @param index 置換される要素のインデックス
	 * @param element 指定された位置に格納される要素
	 */
	public void setLong(int index, long element);

	/**
	 * <P>
	 * リスト内の指定された位置に、指定された long 値を挿入します。
	 * </P>
	 * @param index 指定の要素が挿入されるインデックス
	 * @param element 挿入される要素
	 */
	public void addLong(int index, long element);

	/**
	 * <P>
	 * 指定された long 値をリストの最後に追加します。
	 * </P>
	 * @param element リストに追加される要素
	 * @return この呼び出しの結果、リストが変更された場合は true 
	 */
	public boolean addLong(long element);

	/**
	 * <P>
	 * リスト内の指定された位置にある要素を Java プログラミング言語の Object として返します。
	 * </P>
	 * @param index 返される要素のインデックス
	 * @return リスト内の指定された位置にある要素
	 */
	public Object getObject(int index);

	/**
	 * <P>
	 * リスト内の指定された位置にある要素を、指定された Object 値に置き換えます。
	 * </P>
	 * @param index 置換される要素のインデックス
	 * @param element 指定された位置に格納される要素
	 */
	public void setObject(int index, Object element);

	/**
	 * <P>
	 * リスト内の指定された位置に、指定された Object 値を挿入します。
	 * </P>
	 * @param index 指定の要素が挿入されるインデックス
	 * @param element 挿入される要素
	 */
	public void addObject(int index, Object element);

	/**
	 * <P>
	 * 指定された Object 値をリストの最後に追加します。
	 * </P>
	 * @param element リストに追加される要素
	 * @return この呼び出しの結果、リストが変更された場合は true 
	 */
	public boolean addObject(Object element);

	/**
	 * <P>
	 * リスト内の指定された位置にある要素を Java プログラミング言語の short として返します。
	 * </P>
	 * @param index 返される要素のインデックス
	 * @return リスト内の指定された位置にある要素
	 */
	public short getShort(int index);

	/**
	 * <P>
	 * リスト内の指定された位置にある要素を、指定された short 値に置き換えます。
	 * </P>
	 * @param index 置換される要素のインデックス
	 * @param element 指定された位置に格納される要素
	 */
	public void setShort(int index, short element);

	/**
	 * <P>
	 * リスト内の指定された位置に、指定された short 値を挿入します。
	 * </P>
	 * @param index 指定の要素が挿入されるインデックス
	 * @param element 挿入される要素
	 */
	public void addShort(int index, short element);

	/**
	 * <P>
	 * 指定された short 値をリストの最後に追加します。
	 * </P>
	 * @param element リストに追加される要素
	 * @return この呼び出しの結果、リストが変更された場合は true 
	 */
	public boolean addShort(short element);

	/**
	 * <P>
	 * リスト内の指定された位置にある要素を Java プログラミング言語の String として返します。
	 * </P>
	 * @param index 返される要素のインデックス
	 * @return リスト内の指定された位置にある要素
	 */
	public String getString(int index);

	/**
	 * <P>
	 * リスト内の指定された位置にある要素を、指定された String 値に置き換えます。
	 * </P>
	 * @param index 置換される要素のインデックス
	 * @param element 指定された位置に格納される要素
	 */
	public void setString(int index, String element);

	/**
	 * <P>
	 * リスト内の指定された位置に、指定された String 値を挿入します。
	 * </P>
	 * @param index 指定の要素が挿入されるインデックス
	 * @param element 挿入される要素
	 */
	public void addString(int index, String element);

	/**
	 * <P>
	 * 指定された String 値をリストの最後に追加します。
	 * </P>
	 * @param element リストに追加される要素
	 * @return この呼び出しの結果、リストが変更された場合は true 
	 */
	public boolean addString(String element);

	/**
	 * <P>
	 * リスト内の指定された位置にある要素を java.util.List として返します。
	 * </P>
	 * @param index 返される要素のインデックス
	 * @return リスト内の指定された位置にある要素
	 */
	public java.util.List getList(int index);

	/**
	 * <P>
	 * リスト内の指定された位置にある要素を、指定された java.util.List に置き換えます。
	 * </P>
	 * @param index 置換される要素のインデックス
	 * @param element 指定された位置に格納される要素
	 */
	public void setList(int index, java.util.List element);

	/**
	 * <P>
	 * リスト内の指定された位置に、指定された java.util.List を挿入します。
	 * </P>
	 * @param index 指定の要素が挿入されるインデックス
	 * @param element 挿入される要素
	 */
	public void addList(int index, java.util.List element);

	/**
	 * <P>
	 * 指定された java.util.List をリストの最後に追加します。
	 * </P>
	 * @param element リストに追加される要素
	 * @return この呼び出しの結果、リストが変更された場合は true 
	 */
	public boolean addList(java.util.List element);

	/**
	 * <P>
	 * リスト内の指定された位置にある要素を java.util.Map として返します。
	 * </P>
	 * @param index 返される要素のインデックス
	 * @return リスト内の指定された位置にある要素
	 */
	public java.util.Map getMap(int index);

	/**
	 * <P>
	 * リスト内の指定された位置にある要素を、指定された java.util.Map に置き換えます。
	 * </P>
	 * @param index 置換される要素のインデックス
	 * @param element 指定された位置に格納される要素
	 */
	public void setMap(int index, java.util.Map element);

	/**
	 * <P>
	 * リスト内の指定された位置に、指定された java.util.Map を挿入します。
	 * </P>
	 * @param index 指定の要素が挿入されるインデックス
	 * @param element 挿入される要素
	 */
	public void addMap(int index, java.util.Map element);

	/**
	 * <P>
	 * 指定された java.util.Map をリストの最後に追加します。
	 * </P>
	 * @param element リストに追加される要素
	 * @return この呼び出しの結果、リストが変更された場合は true 
	 */
	public boolean addMap(java.util.Map element);

}
