Bool_T Postsolver::GetRowData( Real_T &val, Int_T &len, // ) Array<Real_T> &a, Array<Int_T> &ind ) { //-------------------------------------------------------------------------- // Read the removed variable's coefficient in the row in question. // if( !Lexer::GetSpace() ) { Error( "Premature end of section." ); return False; } if( !Lexer::GetKeyword( "VALUE" ) || !Lexer::GetSpace() || !Lexer::GetNumeric() ) { Error( "Variable's coefficient expected." ); return False; } val = Lexer::Number; Lexer::GetNewline( True ); //-------------------------------------------------------------------------- // Read the row's coefficients. // { Int_T max_len = 10; a.Resize( max_len); a.Fill( 0.0, max_len ); ind.Resize( max_len ); ind.Fill( -1, max_len ); for( len = 0; Lexer::GetSpace(); len++ ) { if( !Lexer::GetKeyword( "COEFF" ) || !Lexer::GetSpace() ) { Error( "Matrix coefficient expected." ); return False; } if( len >= max_len ) { Int_T new_max_len = Int_T( Max( max_len + 10, 3*max_len/2 ) ); a.Resize( new_max_len ); ind.Resize( new_max_len ); a.Fill( 0.0, new_max_len, max_len ); ind.Fill( -1, new_max_len, max_len ); max_len = new_max_len; } if( !Lexer::GetNumeric() || !Lexer::GetSpace() ) { Error( "Variable index expected." ); return False; } ind[len] = (Int_T) Lexer::Number; if( !Lexer::GetNumeric() ) { Error( "Matrix coefficient expected." ); return False; } a[len] = Lexer::Number; if( ind[len] < 0 || ind[len] >= n ) { Error( "Variable index out of range: %d", ind[len] ); return False; } Lexer::GetNewline( True ); } } return True; }