double MatlabEngine::GetScalar( const string& inExp ) { DoubleMatrix result = GetMatrix( inExp ); if( result.empty() || result[ 0 ].empty() ) { bcierr << "Could not get scalar value \"" << inExp << "\"" << endl; result.resize( 1, vector<double>( 1 ) ); } return result[ 0 ][ 0 ]; }
bool MatlabEngine::PutMatrix( const string& inExp, const DoubleMatrix& inValue ) { int sizeDim2 = inValue.empty() ? 0 : inValue[ 0 ].size(); mxArray* val = mxCreateNumericMatrix( inValue.size(), sizeDim2, mxDOUBLE_CLASS, mxREAL ); double* data = mxGetPr( val ); if( data ) { int indices[] = { 0, 0 }; for( size_t i = 0; i < inValue.size(); ++i ) { indices[ 0 ] = i; for( size_t j = 0; j < inValue[ i ].size(); ++j ) { indices[ 1 ] = j; data[ mxCalcSingleSubscript( val, 2, indices ) ] = inValue[ i ][ j ]; } } } bool success = PutMxArray( inExp, val ); mxDestroyArray( val ); return success; }
bool MatlabEngine::PutMatrix( const string& inExp, const DoubleMatrix& inValue ) { mwSize sizeDim2 = static_cast<mwSize>( inValue.empty() ? 0 : inValue[ 0 ].size() ); mxArray* val = mxCreateNumericMatrix_( static_cast<mwSize>( inValue.size() ), sizeDim2, mxDOUBLE_CLASS, mxREAL ); double* data = mxGetPr_( val ); if( data ) { mwIndex indices[] = { 0, 0 }; for( mwIndex i = 0; i < static_cast<mwIndex>( inValue.size() ); ++i ) { indices[ 0 ] = i; for( mwIndex j = 0; j < static_cast<mwIndex>( inValue[ i ].size() ); ++j ) { indices[ 1 ] = j; data[ mxCalcSingleSubscript_( val, 2, indices ) ] = inValue[ i ][ j ]; } } } bool success = PutMxArray( inExp, val ); mxDestroyArray_( val ); return success; }