/* \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 "../objects/Param.h" #include "./io.h" #include "../shared/shared.h" #undef __FUNCT__ #define __FUNCT__ "FetchParams" void FetchParams(DataSet** pparameters, DataHandle dataref){ int i,j,count; /*output: */ Param* param=NULL; Numpar* numpar=NULL; DataSet* 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; /*First, create parameters : */ parameters=new DataSet(); /*Then, create Numpar object, before building the params objects: */ numpar= new Numpar(1); parameters->AddObject(numpar); /*now, go through matlab params structure, and create Param object for each field: */ nfields=mxGetNumberOfFields(dataref); for(count=0;countSetDouble(*mxGetPr(pfield)); parameters->AddObject(param); } else{ if (N==1){ /*vector: */ param= new Param(count+1,name,DOUBLEVEC); param->SetDoubleVec(mxGetPr(pfield),M,1); parameters->AddObject(param); } else{ /*matrix: first, transpose, then plug into Param */ matrix=mxGetPr(pfield); tmatrix=(double*)xmalloc(M*N*sizeof(double)); for (i=0;iSetDoubleMat(tmatrix,M,N); parameters->AddObject(param); /*Free ressources:*/ xfree((void**)&tmatrix); } } } else if (mxIsChar(pfield)){ /* string: */ param= new Param(count+1,name,STRING); param->SetString((char*)mxGetChars(pfield)); parameters->AddObject(param); } else if (mxIsCell(pfield)){ /*string array: */ M=mxGetM(pfield); stringarray=(char**)xmalloc(M*sizeof(char*)); for(i=0;iSetStringArray(stringarray,M); parameters->AddObject(param); /*Free ressources:*/ for(i=0;i