Пример #1
0
void CAITrigger::Analyze_( char * data )
{
	CAIEquation * tmp;
	CAIOperator * ope;
	tmp = 0;
	// �@ 数字、文字ジャッジ
	if( strcmp( data, "test" ) == 0 ){
		tmp = new CTRITest();
	}
	else if(
		  ( data[0] == '0' )
		  || ( atoi( data ) )
		){
        tmp = new CTRIValue( atoi(data) );
	}
	// 数字、文字がヒットしたら、配列に追加&辺(左辺/右辺)にセット
	if( tmp != 0 ){
		if( m_Value1 == 0 ){
			m_Value1 = tmp ;
		}
		else{
			m_Value2 = tmp ;
		}
		AddEquation( tmp );
	}

	// 両辺がそろったら演算式にセット
	if( m_Value2 != 0 )
	{
		m_Operation->SetEquation( m_Value1, m_Value2 );
		m_LastOperation = m_Operation;
		//次の左辺は、今回の演算式になる
		m_Value1 = m_Operation;
		m_Value2 = 0;
		m_Operation = 0;
	}

	// �A 演算式ジャッジ
	ope = 0;
	if( strcmp( data, "=") == 0 ){
		ope = new CTRIEqual();
	}
	// 演算式ヒットしたら、配列ににセット
	if( ope != 0 ){
		AddEquation( ope );
		m_Operation = ope ;
	}
}
Пример #2
0
void L2SysSurResol::V_GSSR_AddNewEquation(REAL aPds,REAL * aCoeff,REAL aB)
{
    AddEquation(aPds,aCoeff,aB);
}
Пример #3
0
int CAITrigger::Indent( int start, CAIEquation ** term )
{
	char * data;

	CAIEquation * tmp;
	CAIOperator * ope;
	tmp = 0;

	CAIEquation * value1 = 0;
	CAIEquation * value2 = 0;
	CAIOperator * operation = 0;
	CAIOperator * lastOperation = 0;

	while( start < m_Size ){
		data = m_Data[start];
		ope = 0;
		tmp = 0;
		start ++;


		// �A 演算式ジャッジ
		if( strcmp( data, "=") == 0 ){
			ope = new CTRIEqual();
		}
		else if( strcmp( data, "<" ) == 0){
			ope = new CTRIOver();
		}
		else if( strcmp( data, ">" ) == 0){
			ope = new CTRIUnder();
		}
		// 演算式ヒットしたら、配列ににセット
		if( ope != 0 ){
			AddEquation( ope );
			operation = ope ;
			*term = ope;
		}

		// �@ 入れ子(インデント)判定
		if( strcmp( data, "(" ) == 0 ){
			start = Indent( start, &tmp );
			if( ( operation == 0 ) && ( value1 != 0 ) ){
				ope = new CTRIAnd();
				operation = ope ;
			AddEquation( ope );
			*term = ope;
			}
			// &&挿入
		}
		else if( strcmp( data, ")" ) == 0 ){
			return start;
		}
		// �A 数字、文字ジャッジ
		else if( MakeEquation( data, &tmp ) ){
		}
		else if(
			( data[0] == '0' )
			|| ( atoi( data ) )
			){
			tmp = new CTRIValue( atoi(data) );
		}

		// 数字、文字がヒットしたら、配列に追加&辺(左辺/右辺)にセット
		if( tmp != 0 ){
			if( value1 == 0 ){
				value1 = tmp ;
			}
			else if( ( value2 == 0 ) && ( operation == 0 )){
				return start-1;
			}
			else{
				value2 = tmp ;
			}
			AddEquation( tmp );
		}

		// 両辺がそろったら演算式にセット
		if( value2 != 0 )
		{
			operation->SetEquation( value1, value2 );
//			AddEquation( ope );
//			*term = ope;
			m_LastOperation = operation;
			//次の左辺は、今回の演算式になる
			value1 = operation;
			value2 = 0;
			operation = 0;
		}
	}
	return start;
}