Ignore:
Timestamp:
08/24/17 14:29:30 (8 years ago)
Author:
Mathieu Morlighem
Message:

CHG: simplifying options: do not allow for cells and structs

Location:
issm/trunk-jpl/src/wrappers/matlab/io
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/wrappers/matlab/io/FetchMatlabData.cpp

    r21881 r22000  
    10931093        return(ochar);
    10941094}/*}}}*/
    1095 GenericOption<Options**>* OptionStructParse( char* name, const mxArray* prhs[]){ /*{{{*/
    1096 
    1097         int            i;
    1098         char           namei[161];
    1099         Option*                   option      = NULL;
    1100         GenericOption<Options**>  *ostruct    = NULL;
    1101         const mwSize  *ipt        = NULL;
    1102         const mxArray *structi;
    1103         mwIndex        sindex;
    1104 
    1105         /*check and parse the name  */
    1106         ostruct=new GenericOption<Options**>();
    1107         ostruct->name =xNew<char>(strlen(name)+1);
    1108         memcpy(ostruct->name,name,(strlen(name)+1)*sizeof(char));
    1109 
    1110         /*check and parse the value  */
    1111         if (!mxIsClass(prhs[0],"struct")){
    1112                 _error_("Value of option \"" << ostruct->name  << "\" must be class \"struct\", not class \"" << mxGetClassName(prhs[0]) <<"\".");
    1113         }
    1114         ostruct->numel=mxGetNumberOfElements(prhs[0]);
    1115         ostruct->ndims=mxGetNumberOfDimensions(prhs[0]);
    1116         ipt           =mxGetDimensions(prhs[0]);
    1117         ostruct->size =xNew<int>(ostruct->ndims);
    1118         for (i=0; i<ostruct->ndims; i++) ostruct->size[i]=(int)ipt[i];
    1119         if (ostruct->numel) ostruct->value=xNew<Options*>(ostruct->numel);
    1120 
    1121         /*loop through and process each element of the struct array  */
    1122         for (sindex=0; sindex<ostruct->numel; sindex++) {
    1123                 ostruct->value[sindex]=new Options;
    1124 
    1125                 /*loop through and process each field for the element  */
    1126                 for (i=0; i<mxGetNumberOfFields(prhs[0]); i++) {
    1127                         sprintf(namei,"%s.%s",name,mxGetFieldNameByNumber(prhs[0],i));
    1128                         structi=mxGetFieldByNumber(prhs[0],sindex,i);
    1129 
    1130                         option=(Option*)OptionParse(namei,&structi);
    1131                         ostruct->value[sindex]->AddObject((Object*)option);
    1132                         option=NULL;
    1133                 }
    1134         }
    1135 
    1136         return(ostruct);
    1137 }/*}}}*/
    1138 GenericOption<Options*>* OptionCellParse( char* name, const mxArray* prhs[]){ /*{{{*/
    1139 
    1140         int            i;
    1141         int           *dims;
    1142         char           namei[161];
    1143         char           cstr[81];
    1144         GenericOption<Options*> *ocell      = NULL;
    1145         Option        *option     = NULL;
    1146         const mwSize  *ipt        = NULL;
    1147         const mxArray *celli;
    1148         mwIndex        cindex;
    1149 
    1150         /*check and parse the name  */
    1151         ocell=new GenericOption<Options*>();
    1152         ocell->name =xNew<char>(strlen(name)+1);
    1153         memcpy(ocell->name,name,(strlen(name)+1)*sizeof(char));
    1154 
    1155         /*check and parse the value  */
    1156         if (!mxIsClass(prhs[0],"cell")){
    1157                 _error_("Value of option \"" << ocell->name  << "\" must be class \"cell\", not class \"" << mxGetClassName(prhs[0]) <<"\".");
    1158         }
    1159 
    1160         ocell->numel=mxGetNumberOfElements(prhs[0]);
    1161         ocell->ndims=mxGetNumberOfDimensions(prhs[0]);
    1162         ipt         =mxGetDimensions(prhs[0]);
    1163         ocell->size =xNew<int>(ocell->ndims);
    1164         for (i=0; i<ocell->ndims; i++) ocell->size[i]=(int)ipt[i];
    1165         ocell->value=new Options;
    1166 
    1167         /*loop through and process each element of the cell array  */
    1168         dims=xNew<int>(ocell->ndims);
    1169         for (cindex=0; cindex<ocell->numel; cindex++) {
    1170                 ColumnWiseDimsFromIndex(dims,(int)cindex,ocell->size,ocell->ndims);
    1171                 StringFromDims(cstr,dims,ocell->ndims);
    1172                 #ifdef _INTEL_WIN_
    1173                         _snprintf(namei,161,"%s%s",name,cstr);
    1174                 #else
    1175                         snprintf(namei,161,"%s%s",name,cstr);
    1176                 #endif
    1177                 celli=mxGetCell(prhs[0],cindex);
    1178 
    1179                 option=(Option*)OptionParse(namei,&celli);
    1180                 ocell->value->AddObject((Object*)option);
    1181                 option=NULL;
    1182         }
    1183         xDelete<int>(dims);
    1184 
    1185         return(ocell);
    1186 }/*}}}*/
    11871095Option* OptionParse(char* name, const mxArray* prhs[]){ /*{{{*/
    11881096
     
    11991107        else if(mxIsClass(prhs[0],"char"))
    12001108         option=(Option*)OptionCharParse(name,prhs);
    1201         else if(mxIsClass(prhs[0],"struct"))
    1202          option=(Option*)OptionStructParse(name,prhs);
    1203         else if(mxIsClass(prhs[0],"cell"))
    1204          option=(Option*)OptionCellParse(name,prhs);
    12051109        else {
    1206                 _printf0_("  Converting value of option \"" << name << "\" from unrecognized class \"" << mxGetClassName(prhs[0]) << "\" to class \"" << "struct" << "\".\n");
    1207                 if (!mexCallMATLAB(1,lhs,1,(mxArray**)prhs,"struct")) {
    1208                         option=(Option*)OptionStructParse(name,(const mxArray**)lhs);
    1209                         mxDestroyArray(lhs[0]);
    1210                 }
    1211                 else _error_("Second argument value of option \""<< name <<"\" is of unrecognized class \""<< mxGetClassName(prhs[0]) <<"\".");
     1110                _error_("Second argument value of option \""<< name <<"\" is of unrecognized class \""<< mxGetClassName(prhs[0]) <<"\".");
    12121111        }
    12131112
  • issm/trunk-jpl/src/wrappers/matlab/io/matlabio.h

    r21070 r22000  
    5959GenericOption<bool*>*     OptionLogicalParse( char* name, const mxArray* prhs[]);
    6060GenericOption<char*>*     OptionCharParse( char* name, const mxArray* prhs[]);
    61 GenericOption<Options**>* OptionStructParse( char* name, const mxArray* prhs[]);
    62 GenericOption<Options*>*  OptionCellParse( char* name, const mxArray* prhs[]);
    6361
    6462mxArray* mxGetAssignedField(const mxArray* pmxa_array,int number, const char* field);
Note: See TracChangeset for help on using the changeset viewer.