Changeset 20636


Ignore:
Timestamp:
05/23/16 10:29:41 (9 years ago)
Author:
Mathieu Morlighem
Message:

BUG: fixed marshall demarshall for params

Location:
issm/trunk-jpl/src/c/classes/Params
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/c/classes/Params/Param.h

    r20635 r20636  
    2626                /*Virtual functions:*/
    2727                virtual void  Echo()=0;
     28                virtual int   ObjectEnum()=0;
    2829                virtual Param* copy()=0;
     30                virtual void Marshall(char** pmarshalled_data, int* pmarshalled_data_size, int marshall_direction)=0;
    2931                virtual int   InstanceEnum()=0;
    3032                virtual void  GetParameterValue(bool* pbool)=0;
  • issm/trunk-jpl/src/c/classes/Params/Parameters.cpp

    r20635 r20636  
    3232#include "./StringArrayParam.h"
    3333#include "./StringParam.h"
     34#include "./DoubleMatArrayParam.h"
     35#include "./TransientParam.h"
    3436
    3537#include "../../shared/shared.h"
     
    7981/*}}}*/
    8082void Parameters::Marshall(char** pmarshalled_data, int* pmarshalled_data_size, int marshall_direction){/*{{{*/
    81         _error_("not implemented yet");
     83
     84        int obj_enum=-1;
     85        int num_params=0;
     86
     87        MARSHALLING_ENUM(ParametersEnum);
     88
     89        if(marshall_direction==MARSHALLING_FORWARD || marshall_direction==MARSHALLING_SIZE){
     90
     91                /*Marshall num_params first*/
     92                for(int i=0;i<NUMPARAMS;i++){
     93                        if(this->params[i]) num_params++;
     94                }
     95                MARSHALLING(num_params);
     96
     97                /*Marshall Parameters one by one now*/
     98                for(int i=0;i<NUMPARAMS;i++){
     99                        if(this->params[i]){
     100                                obj_enum = this->params[i]->ObjectEnum();
     101                                MARSHALLING(obj_enum);
     102                                this->params[i]->Marshall(pmarshalled_data,pmarshalled_data_size,marshall_direction);
     103                        }
     104                }
     105        }
     106        else{
     107
     108                /*Get number of params marshalled*/
     109                MARSHALLING(num_params);
     110
     111                /*Recover parameters one by one*/
     112                for(int i=0;i<num_params;i++){
     113
     114                        /*Recover enum of object first: */
     115                        MARSHALLING(obj_enum);
     116
     117                        if(obj_enum==DoubleParamEnum){
     118                                DoubleParam* doubleparam=NULL;
     119                                doubleparam=new DoubleParam();
     120                                doubleparam->Marshall(pmarshalled_data,pmarshalled_data_size,marshall_direction);
     121                                this->AddObject(doubleparam);
     122                        }
     123                        else if(obj_enum==IntParamEnum){
     124                                IntParam* intparam=NULL;
     125                                intparam=new IntParam();
     126                                intparam->Marshall(pmarshalled_data,pmarshalled_data_size,marshall_direction);
     127                                this->AddObject(intparam);
     128                        }
     129                        else if(obj_enum==IntMatParamEnum){
     130                                IntMatParam* intmparam=NULL;
     131                                intmparam=new IntMatParam();
     132                                intmparam->Marshall(pmarshalled_data,pmarshalled_data_size,marshall_direction);
     133                                this->AddObject(intmparam);
     134                        }
     135                        else if(obj_enum==IntVecParamEnum){
     136                                IntVecParam* intvparam=NULL;
     137                                intvparam=new IntVecParam();
     138                                intvparam->Marshall(pmarshalled_data,pmarshalled_data_size,marshall_direction);
     139                                this->AddObject(intvparam);
     140                        }
     141                        else if(obj_enum==BoolParamEnum){
     142                                BoolParam* boolparam=NULL;
     143                                boolparam=new BoolParam();
     144                                boolparam->Marshall(pmarshalled_data,pmarshalled_data_size,marshall_direction);
     145                                this->AddObject(boolparam);
     146                        }
     147                        else if(obj_enum==DataSetParamEnum){
     148                                DataSetParam* dsparam=NULL;
     149                                dsparam=new DataSetParam();
     150                                dsparam->Marshall(pmarshalled_data,pmarshalled_data_size,marshall_direction);
     151                                this->AddObject(dsparam);
     152                        }
     153                        else if(obj_enum==DoubleMatArrayParamEnum){
     154                                DoubleMatArrayParam* dmaparam=NULL;
     155                                dmaparam=new DoubleMatArrayParam();
     156                                dmaparam->Marshall(pmarshalled_data,pmarshalled_data_size,marshall_direction);
     157                                this->AddObject(dmaparam);
     158                        }
     159                        else if(obj_enum==DoubleMatParamEnum){
     160                                DoubleMatParam* dmparam=NULL;
     161                                dmparam=new DoubleMatParam();
     162                                dmparam->Marshall(pmarshalled_data,pmarshalled_data_size,marshall_direction);
     163                                this->AddObject(dmparam);
     164                        }
     165                        else if(obj_enum==DoubleVecParamEnum){
     166                                DoubleVecParam* dvparam=NULL;
     167                                dvparam=new DoubleVecParam();
     168                                dvparam->Marshall(pmarshalled_data,pmarshalled_data_size,marshall_direction);
     169                                this->AddObject(dvparam);
     170                        }
     171                        else if(obj_enum==FileParamEnum){
     172                                FileParam* fileparam=NULL;
     173                                fileparam=new FileParam();
     174                                fileparam->Marshall(pmarshalled_data,pmarshalled_data_size,marshall_direction);
     175                                delete fileparam;
     176                                /* No need to add this object, the pointer is not valid             
     177                                        The FemModel should reset all FileParams in the restart function */
     178                        }
     179                        else if(obj_enum==StringParamEnum){
     180                                StringParam* sparam=NULL;
     181                                sparam=new StringParam();
     182                                sparam->Marshall(pmarshalled_data,pmarshalled_data_size,marshall_direction);
     183                                this->AddObject(sparam);
     184                        }
     185                        else if(obj_enum==StringArrayParamEnum){
     186                                StringArrayParam* saparam=NULL;
     187                                saparam=new StringArrayParam();
     188                                saparam->Marshall(pmarshalled_data,pmarshalled_data_size,marshall_direction);
     189                                this->AddObject(saparam);
     190                        }
     191                        else if(obj_enum==TransientParamEnum){
     192                                TransientParam* transparam=NULL;
     193                                transparam=new TransientParam();
     194                                transparam->Marshall(pmarshalled_data,pmarshalled_data_size,marshall_direction);
     195                                this->AddObject(transparam);
     196                        }
     197                        else if(obj_enum==GenericParamEnum){
     198                                /*Skip for now (we don't want to Marhsall Comms*/
     199                        }
     200                }
     201        }
    82202}
    83203/*}}}*/
Note: See TracChangeset for help on using the changeset viewer.