// 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.shadervm;

import static net.cellcomputing.himawari.library.EqIntIndex.*;
import net.cellcomputing.himawari.accessory.STLVector;
import net.cellcomputing.himawari.accessory.primitive.p_String;
import net.cellcomputing.himawari.accessory.primitive.p_boolean;
import net.cellcomputing.himawari.library.CqStats;
import net.cellcomputing.himawari.library.EqVariableType;
import net.cellcomputing.himawari.library.IqShaderData;

/**
 * CqShaderVaribaleUniformを継承した、
 * String型の変数を持つShaderData
 * @author NTT DATA Corporation
 */
public strictfp class CqShaderVariableUniformString extends CqShaderVariableUniform<p_String> {
	
	/**
	 * コンストラクタ
	 * 統計情報を更新する。
	 */
	public CqShaderVariableUniformString()
	{
		super(new EqVariableType(EqVariableType.type_string));
		m_Value = new p_String();
		CqStats.STATS_INC( SHD_var_uniform_string );
	}
	
	/**
	 * コンストラクタ
	 * 統計情報を更新する。
	 * @param strName
	 * @param fParameter
	 */
	public CqShaderVariableUniformString( final String strName, boolean fParameter)
	{
		super(strName, fParameter ,new EqVariableType(EqVariableType.type_string));
		m_Value = new p_String();
		CqStats.STATS_INC( SHD_var_uniform_string );
	}
	
	/**
	 * コンストラクタ
	 * @param strName
	 */
	public CqShaderVariableUniformString(final String strName){
		this(strName,false);
	}
	
	
	/**
	 * コピーコンストラクタ
	 * @param val コピー元
	 */
	public CqShaderVariableUniformString(CqShaderVariableUniformString val){
		super(val,new EqVariableType(EqVariableType.type_string));
	}
	
	/**
	 * ShaderDataの持つStringの値を取得する
	 * @param res 結果を格納する変数
	 * @param index 使用しない
	 */
	public void	GetString( p_String res, int index)
	{
		res.value = m_Value.value;
	}
	
	/**
	 * ShaderDataの持つ、Stringのポインタを取得する。
	 * 
	 * @param res 結果を格納する。中身を変更するとShaderDataないの値も影響を受ける
	 */
	public void GetStringPtr( final STLVector<p_String> res )
	{
//		res = m_Value;
		if(res.size() < 1)
			res.add(m_Value);
		else
			res.setElementAt(m_Value,0);
	}
	
	/**
	 * ShaderDataの値を変更する。
	 * 
	 * @param s 変更する値
	 */
	public void	SetString( final String s )
	{
		m_Value.value = s;
	}
	/**
	 * ShaderDataの値が""でない場合はfalse
	 * ""である場合はtrueと返すメソッド
	 * @param res 結果を格納する変数
	 * @param index 使用しない
	 */
	public void	GetBool(p_boolean res, int index)
	{
		res.value = m_Value.value.compareTo( "" ) == 0;
	}
	/** 
	 * Copy the values from the passed variable into this, taking into account any class differences.
	 * 引数で渡された変数の値をコピーする。
	 * 
	 * @param pVal コピー元の変数The variable to copy from.
	 */
	public void	SetValueFromVariable(final IqShaderData pVal )
	{
		pVal.GetString( m_Value );
	}
	
	/**
	 * 自分と同じ値を持つインスタンスを返す
	 * 
	 * @return 自分自身のコピー
	 */
	public IqShaderData Clone()
	{
		CqShaderVariableUniformString newVar = new CqShaderVariableUniformString( this );
		newVar.SetSize((int) Size() );
		newVar.SetValueFromVariable( this );
		return ( newVar );
	}
	
}
