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 ; } }
void L2SysSurResol::V_GSSR_AddNewEquation(REAL aPds,REAL * aCoeff,REAL aB) { AddEquation(aPds,aCoeff,aB); }
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; }