#ifndef MXFNC_H #define MXFNC_H #include #include "mex_parser.h" namespace bdm { /*! class mapping fnc.eval to call of matlab function via mexCallMatlab */ class mexFnc: public fnc { protected: string fname; public: vec eval(const vec &cond) { mxArray *mxinp = mxCreateDoubleMatrix ( cond.length(), 1, mxREAL ); mxArray *mxout; vec2mxArray(cond,mxinp); mexCallMATLAB ( 1, &mxout, 1, &mxinp, fname.c_str() ); bdm_assert(int(mxGetN(mxout))==(dimension()) || int(mxGetM(mxout))==(dimension()), "vector length mismatch"); vec tmp=mxArray2vec(mxout); return tmp; } /*! \code function = 'matlab_function_name'; \endcode */ void from_setting(const Setting &set) { fnc::from_setting(set); UI::get(fname, set, "function", UI::compulsory); } void to_setting(Setting &set) const { fnc::to_setting(set); UI::save(fname, set, "function"); } }; UIREGISTER(mexFnc); } #endif //MXFNC_H