// Aqsis
// Copyright (c) 1997 - 2001, Paul C. Gregory
//
// Contact: pgregory@aqsis.com
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public
// License as published by the Free Software Foundation; either
// version 2 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
// General Public License for more details.
//
// You should have received a copy of the GNU General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

/**
 * Copyright (C) 2006-2007  NTT DATA CORPORATION
 * 
 * Version: 1.0.0 2007/04/01
 *  
 */
package net.cellcomputing.himawari.library;

/**
 * 値のタイプとidのタイプでテンプレート化された、表面情報のパラメータタイプ。
 * @author NTT DATA Corporation
 */
public strictfp class CqParameterTypedFaceVarying<T,SLT> extends CqParameterTypedVarying<T,SLT> {
	/**
	 * コンストラクタ
	 * @param str 名前
	 * @param count サイズ
	 * @param I Generics I
	 * @param TClass Generics TのClass
	 * @param SLTClass Generics SLTのClass
	 */
	public CqParameterTypedFaceVarying(final String str,int count,EqVariableType I,Class<? extends T> TClass,Class<? extends SLT> SLTClass){
		super(str,count,I,TClass,SLTClass);
	}
	
	/**
	 * コンストラクタ
	 * countを省略している。
	 * 
	 * @param str 名前
	 * @param I Generics I
	 * @param TClass Generics TのClass
	 * @param SLTClass Generics SLTのClass
	 */
	public CqParameterTypedFaceVarying(final String str,EqVariableType I,Class<? extends T> TClass,Class<? extends SLT> SLTClass){
		this(str,1,I,TClass,SLTClass);
	}
	
	/**
	 * コピーコンストラクタ
	 * 
	 * @param From コピー元
	 * @param I Generics I
	 */
	public CqParameterTypedFaceVarying(final CqParameterTypedFaceVarying<T, SLT> From ,EqVariableType I){
		super(From,I);
	}
	
	/**
	 * Typeの同じインスタンスを生成して返す
	 * 
	 * @param Name 名前
	 * @param Count カウント
	 * @return 新しいCqParameter
	 */

	public 	CqParameter CloneType( final String Name, int count)
    {
        return ( new CqParameterTypedFaceVarying<T,SLT>( Name, count,I,TClass,SLTClass ) );
    }
    
	/**
	 * デストラクタ
	 */
	public void destruct(){
		super.destruct();
	}
	
	/**
	 * 自分自身の複製を生成して返す
	 * コピーコンストラクタを呼び出している。
	 * 
	 * @return 自分と同じ値を持つインスタンス
	 */
	public 	CqParameter Clone() 
    {
        return ( new CqParameterTypedFaceVarying<T,SLT>( this ,I) );
    }
	/**
	 * 自分のEqVariableClassを返す
	 *
	 * @return 自分のEqVariableClass
	 */
    public 	EqVariableClass	Class()
    {
        return ( new EqVariableClass(EqVariableClass.class_facevarying) );
    }
    
	/**
	 * static コンストラクタ
	 * コンストラクタと同様に利用できる
	 * @param strName 名前
	 * @param Count カウント
	 * @param I Generics I
	 * @param myClass Generics TのClass
	 */
	public static	<T,SLT> CqParameter	Create2( final String strName, int Count,EqVariableType I,Class<? extends T> TClass,Class<? extends SLT> SLTClass)
	{
		return ( new CqParameterTypedFaceVarying<T,SLT>( strName, Count ,I,TClass,SLTClass) );
	}
	
	/**
	 * static コンストラクタ
	 * コンストラクタと同様に利用できる(count省略系)
	 * @param strName 名前
	 * @param I Generics I
	 * @param TClass Generics TのClass
	 * @param SLTClass Generics SLTのClass
	 */
	public static	<T,SLT> CqParameter	Create2( final String strName,EqVariableType I,Class<? extends T> TClass,Class<? extends SLT> SLTClass)
	{
		return CqParameterTypedFaceVarying.<T,SLT>Create2(strName,1,I,TClass,SLTClass);
	}
}
