Changeset 7746


Ignore:
Timestamp:
04/01/11 08:41:32 (14 years ago)
Author:
Mathieu Morlighem
Message:

Partially finished Options

Location:
issm/trunk/src/c
Files:
2 added
13 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk/src/c/EnumDefinitions/EnumDefinitions.h

    r7680 r7746  
    423423        TriangleInterpEnum,
    424424        BilinearInterpEnum,
    425         NearestInterpEnum
    426         /*}}}*/
     425        NearestInterpEnum,
     426        /*}}}*/
     427        /*Options{{{1*/
     428        OptionEnum,
     429        OptionCellEnum,
     430        OptionCharEnum,
     431        OptionDoubleEnum,
     432        OptionLogicalEnum,
     433        OptionStructEnum
     434          /*}}}*/
    427435};
    428436
  • issm/trunk/src/c/EnumDefinitions/EnumToString.cpp

    r7680 r7746  
    375375                case BilinearInterpEnum : return "BilinearInterp";
    376376                case NearestInterpEnum : return "NearestInterp";
     377                case OptionEnum : return "Option";
     378                case OptionCellEnum : return "OptionCell";
     379                case OptionCharEnum : return "OptionChar";
     380                case OptionDoubleEnum : return "OptionDouble";
     381                case OptionLogicalEnum : return "OptionLogical";
     382                case OptionStructEnum : return "OptionStruct";
    377383                default : return "unknown";
    378384
  • issm/trunk/src/c/EnumDefinitions/StringToEnum.cpp

    r7680 r7746  
    373373        else if (strcmp(name,"BilinearInterp")==0) return BilinearInterpEnum;
    374374        else if (strcmp(name,"NearestInterp")==0) return NearestInterpEnum;
     375        else if (strcmp(name,"Option")==0) return OptionEnum;
     376        else if (strcmp(name,"OptionCell")==0) return OptionCellEnum;
     377        else if (strcmp(name,"OptionChar")==0) return OptionCharEnum;
     378        else if (strcmp(name,"OptionDouble")==0) return OptionDoubleEnum;
     379        else if (strcmp(name,"OptionLogical")==0) return OptionLogicalEnum;
     380        else if (strcmp(name,"OptionStruct")==0) return OptionStructEnum;
    375381        else _error_("Enum %s not found",name);
    376382
  • issm/trunk/src/c/io/OptionParse.cpp

    r7740 r7746  
    1818Option* OptionParse(char* name, const mxArray* prhs[]){
    1919
    20         Option *oobject = NULL;
     20        Option *option = NULL;
    2121        mxArray       *lhs[1];
    2222
    2323        /*parse the value according to the matlab data type  */
    24         if     (mxIsClass(prhs[0],"double"))  oobject=(Option*)OptionDoubleParse(name,prhs);
    25         else if(mxIsClass(prhs[0],"logical")) oobject=(Option*)OptionLogicalParse(name,prhs);
    26         else if(mxIsClass(prhs[0],"char"))    oobject=(Option*)OptionCharParse(name,prhs);
    27         else if(mxIsClass(prhs[0],"struct"))  oobject=(Option*)OptionStructParse(name,prhs);
    28         else if(mxIsClass(prhs[0],"cell"))    oobject=(Option*)OptionCellParse(name,prhs);
     24        if     (mxIsClass(prhs[0],"double"))  option=(Option*)OptionDoubleParse(name,prhs);
     25        else if(mxIsClass(prhs[0],"logical")) option=(Option*)OptionLogicalParse(name,prhs);
     26        else if(mxIsClass(prhs[0],"char"))    option=(Option*)OptionCharParse(name,prhs);
     27        else if(mxIsClass(prhs[0],"struct"))  option=(Option*)OptionStructParse(name,prhs);
     28        else if(mxIsClass(prhs[0],"cell"))    option=(Option*)OptionCellParse(name,prhs);
    2929        else {
    3030                _printf_(true,"  Converting value of option \"%s\" from unrecognized class \"%s\" to class \"%s\".\n",name,mxGetClassName(prhs[0]),"struct");
    3131                if (!mexCallMATLAB(1,lhs,1,(mxArray**)prhs,"struct")) {
    32                         oobject=(Option*)OptionStructParse(name,(const mxArray**)lhs);
     32                        option=(Option*)OptionStructParse(name,(const mxArray**)lhs);
    3333                        mxDestroyArray(lhs[0]);
    3434                }
     
    3636        }
    3737
    38         return(oobject);
     38        return(option);
    3939}/*}}}*/
    4040/*FUNCTION OptionDoubleParse {{{1*/
     
    139139        int            i;
    140140        char           namei[161];
    141         OptionStruct *ostruct    = NULL;
    142         Option *oobject    = NULL;
     141        OptionStruct  *ostruct    = NULL;
     142        Option        *option     = NULL;
    143143        const mwSize  *ipt        = NULL;
    144144        const mxArray *structi;
     
    147147        /*check and parse the name  */
    148148        ostruct=new OptionStruct;
    149         ostruct->name =(char *) xmalloc((strlen(name)+1)*sizeof(char));
     149        ostruct->name =(char*)xmalloc((strlen(name)+1)*sizeof(char));
    150150        strcpy(ostruct->name,name);
    151151
     
    171171                        structi=mxGetFieldByNumber(prhs[0],sindex,i);
    172172
    173                         oobject=(Option*)OptionParse(namei,&structi);
    174                         ostruct->values[sindex]->AddObject((Object*)oobject);
    175                         oobject=NULL;
     173                        option=(Option*)OptionParse(namei,&structi);
     174                        ostruct->values[sindex]->AddObject((Object*)option);
     175                        option=NULL;
    176176                }
    177177        }
     
    186186        char           namei[161];
    187187        char           cstr[81];
    188         OptionCell   *ocell      = NULL;
    189         Option *oobject    = NULL;
     188        OptionCell    *ocell      = NULL;
     189        Option        *option     = NULL;
    190190        const mwSize  *ipt        = NULL;
    191191        const mxArray *celli;
     
    206206        ipt         =mxGetDimensions(prhs[0]);
    207207        ocell->size =(int *) xmalloc(ocell->ndims*sizeof(int));
    208         for (i=0; i<ocell->ndims; i++)
    209                 ocell->size[i]=(int)ipt[i];
     208        for (i=0; i<ocell->ndims; i++) ocell->size[i]=(int)ipt[i];
    210209        ocell->values=new Options;
    211210
     
    218217                celli=mxGetCell(prhs[0],cindex);
    219218
    220                 oobject=(Option*)OptionParse(namei,&celli);
    221                 ocell->values->AddObject((Object*)oobject);
    222                 oobject=NULL;
     219                option=(Option*)OptionParse(namei,&celli);
     220                ocell->values->AddObject((Object*)option);
     221                option=NULL;
    223222        }
    224223        xfree((void**)&dims);
  • issm/trunk/src/c/objects/Options/Option.h

    r7737 r7746  
    3636                int   MarshallSize(){_error_("Not implemented yet");};
    3737                void  Demarshall(char** pmarshalled_dataset){_error_("Not implemented yet");};
    38                 int   Enum(){_error_("Not implemented yet");};
     38                int   Enum(){return OptionEnum;};
    3939                Object* copy(){_error_("Not implemented yet");};
    4040                /*}}}*/
     
    4545                virtual int   NDims()=0;
    4646                virtual int*  Size()=0;
    47 //              virtual Object* Get()=0;
    48 //  get by single index, multiple index, simple find, recursive find
     47                virtual void  Get(double* pvalue)=0;
     48                virtual void  Get(bool* pvalue)=0;
     49                virtual void  Get(char** pvalue)=0;
    4950
    5051};
  • issm/trunk/src/c/objects/Options/OptionCell.h

    r7739 r7746  
    3333                int   MarshallSize(){_error_("Not implemented yet");};
    3434                void  Demarshall(char** pmarshalled_dataset){_error_("Not implemented yet");};
    35                 int   Enum(){_error_("Not implemented yet");};
     35                int   Enum(){return OptionCellEnum;};
    3636                Object* copy(){_error_("Not implemented yet");};
    3737                /*}}}*/
     
    4242                int   NDims();
    4343                int*  Size();
    44 //              Object* Get();
    45 //  get by single index, multiple index, simple find, recursive find
     44                void  Get(double* pvalue){_error_("An OptionCell object cannot return a double");};
     45                void  Get(bool* pvalue){  _error_("An OptionCell object cannot return a bool");};
     46                void  Get(char** pvalue){ _error_("An OptionCell object cannot return a string");};
    4647
    4748};
  • issm/trunk/src/c/objects/Options/OptionChar.cpp

    r7739 r7746  
    127127}
    128128/*}}}*/
    129 /*FUNCTION OptionChar::Get {{{1*/
    130 //void* OptionChar::Get(){
     129/*FUNCTION OptionChar::Get(char** pvalue) {{{1*/
     130void OptionChar::Get(char** pvalue){
    131131
    132 //      ;
     132        char* outstring=NULL;
     133        int   stringsize;
    133134
    134 //      return;
    135 //}
     135        stringsize=strlen(this->values)+1;
     136
     137        outstring=(char*)xmalloc(stringsize*sizeof(char));
     138        memcpy(outstring,this->values,stringsize*sizeof(char));
     139
     140        *pvalue=outstring;
     141}
    136142/*}}}*/
  • issm/trunk/src/c/objects/Options/OptionChar.h

    r7739 r7746  
    3333                int   MarshallSize(){_error_("Not implemented yet");};
    3434                void  Demarshall(char** pmarshalled_dataset){_error_("Not implemented yet");};
    35                 int   Enum(){_error_("Not implemented yet");};
     35                int   Enum(){return OptionCharEnum;};
    3636                Object* copy(){_error_("Not implemented yet");};
    3737                /*}}}*/
     
    4242                int   NDims();
    4343                int*  Size();
    44 //              Object* Get();
    45 //  get by single index, multiple index, simple find, recursive find
     44                void  Get(double* pvalue){_error_("An OptionChar object cannot return a double");};
     45                void  Get(bool* pvalue){  _error_("An OptionChar object cannot return a bool");};
     46                void  Get(char** pvalue);
    4647
    4748};
  • issm/trunk/src/c/objects/Options/OptionDouble.cpp

    r7739 r7746  
    119119}
    120120/*}}}*/
    121 /*FUNCTION OptionDouble::Get {{{1*/
    122 //void* OptionDouble::Get(){
     121/*FUNCTION OptionDouble::Get(double* pvalue) {{{1*/
     122void OptionDouble::Get(double* pvalue){
    123123
    124 //      ;
     124        /*We should first check that the size is one*/
     125        if(this->NumEl()!=1){
     126                _error_("option \"%s\" has %i elements and cannot return a single double",this->name,this->NumEl());
     127        }
    125128
    126 //      return;
    127 //}
     129        /*Assign output pointer*/
     130        *pvalue=this->values[0];
     131}
    128132/*}}}*/
  • issm/trunk/src/c/objects/Options/OptionDouble.h

    r7739 r7746  
    3333                int   MarshallSize(){_error_("Not implemented yet");};
    3434                void  Demarshall(char** pmarshalled_dataset){_error_("Not implemented yet");};
    35                 int   Enum(){_error_("Not implemented yet");};
     35                int   Enum(){return OptionDoubleEnum;};
    3636                Object* copy(){_error_("Not implemented yet");};
    3737                /*}}}*/
     
    4242                int   NDims();
    4343                int*  Size();
    44 //              Object* Get();
    45 //  get by single index, multiple index, simple find, recursive find
     44                void  Get(double* pvalue);
     45                void  Get(bool* pvalue){  _error_("An OptionDouble object cannot return a bool");};
     46                void  Get(char** pvalue){ _error_("An OptionDouble object cannot return a string");};
    4647
    4748};
  • issm/trunk/src/c/objects/Options/OptionLogical.cpp

    r7739 r7746  
    119119}
    120120/*}}}*/
    121 /*FUNCTION OptionLogical::Get {{{1*/
    122 //void* OptionLogical::Get(){
     121/*FUNCTION OptionLogical::Get(bool* pvalue) {{{1*/
     122void OptionLogical::Get(bool* pvalue){
    123123
    124 //      ;
     124        /*We should first check that the size is one*/
     125        if(this->NumEl()!=1){
     126                _error_("option \"%s\" has %i elements and cannot return a single bool",this->name,this->NumEl());
     127        }
    125128
    126 //      return;
    127 //}
     129        /*Assign output pointer*/
     130        *pvalue=this->values[0];
     131}
    128132/*}}}*/
  • issm/trunk/src/c/objects/Options/OptionLogical.h

    r7739 r7746  
    3333                int   MarshallSize(){_error_("Not implemented yet");};
    3434                void  Demarshall(char** pmarshalled_dataset){_error_("Not implemented yet");};
    35                 int   Enum(){_error_("Not implemented yet");};
     35                int   Enum(){return OptionLogicalEnum;};
    3636                Object* copy(){_error_("Not implemented yet");};
    3737                /*}}}*/
     
    4242                int   NDims();
    4343                int*  Size();
    44 //              Object* Get();
    45 //  get by single index, multiple index, simple find, recursive find
     44                void  Get(double* pvalue){_error_("An OptionLogical object cannot return a double");};
     45                void  Get(bool* pvalue);
     46                void  Get(char** pvalue){ _error_("An OptionLogical object cannot return a string");};
    4647
    4748};
  • issm/trunk/src/c/objects/Options/OptionStruct.h

    r7739 r7746  
    3333                int   MarshallSize(){_error_("Not implemented yet");};
    3434                void  Demarshall(char** pmarshalled_dataset){_error_("Not implemented yet");};
    35                 int   Enum(){_error_("Not implemented yet");};
     35                int   Enum(){return OptionStructEnum;};
    3636                Object* copy(){_error_("Not implemented yet");};
    3737                /*}}}*/
     
    4242                int   NDims();
    4343                int*  Size();
    44 //              Object* Get();
    45 //  get by single index, multiple index, simple find, recursive find
     44                void  Get(double* pvalue){_error_("An OptionCell object cannot return a double");};
     45                void  Get(bool* pvalue){  _error_("An OptionCell object cannot return a bool");};
     46                void  Get(char** pvalue){ _error_("An OptionCell object cannot return a string");};
    4647
    4748};
Note: See TracChangeset for help on using the changeset viewer.