/* \file FetchParams.c: * \brief: interface for fetching matlab parameters into a "C" dataset */ #ifdef HAVE_CONFIG_H #include "config.h" #else #error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!" #endif #ifdef _SERIAL_ #include #include "./io.h" #include "../objects/objects.h" #include "../shared/shared.h" #include "../include/macros.h" #include "../EnumDefinitions/EnumDefinitions.h" void FetchParams(Parameters** pparameters, DataHandle dataref){ int i,j; int count; /*output: */ Param* param=NULL; Parameters* parameters=NULL; /*intermediary: */ int M,N; double* tmatrix=NULL; double* matrix=NULL; char** stringarray=NULL; int nfields; char* name=NULL; mxArray* pfield=NULL; mxArray* pfield2=NULL; int enum_type; /*First, create parameters : */ parameters=new Parameters(); /*go through matlab params structure, and create Param object for each field: */ nfields=mxGetNumberOfFields(dataref); for(count=0;countAddObject(param); } else{ if (N==1){ /*vector: */ param= new DoubleVecParam(enum_type,mxGetPr(pfield),M); parameters->AddObject(param); } else{ /*matrix: first, transpose, then plug into Param */ matrix=mxGetPr(pfield); tmatrix=(double*)xmalloc(M*N*sizeof(double)); for (i=0;iAddObject(param); /*Free ressources:*/ xfree((void**)&tmatrix); } } } else if (mxIsChar(pfield)){ /* we have a string parameter:*/ int stringlen; char* string=NULL; stringlen = mxGetM(pfield)*mxGetN(pfield)+1; string = (char*)xmalloc(sizeof(mxChar)*stringlen); mxGetString(pfield,string,stringlen); param= new StringParam(enum_type,string); parameters->AddObject(param); xfree((void**)&string); } else if (mxIsCell(pfield)){ /*string array: */ M=mxGetM(pfield); stringarray=(char**)xmalloc(M*sizeof(char*)); for(i=0;iAddObject(param); /*Free ressources:*/ for(i=0;i