Changeset 11762


Ignore:
Timestamp:
03/20/12 16:53:42 (13 years ago)
Author:
Eric.Larour
Message:

More checks on empty matrices and vectors

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

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/c/toolkits/issm/SeqMat.cpp

    r11733 r11762  
    3232        this->M=pM;
    3333        this->N=pN;
    34         this->matrix=(double*)xcalloc(pM*pN,sizeof(double));
     34        this->matrix=NULL;
     35        if(M*N) this->matrix=(double*)xcalloc(pM*pN,sizeof(double));
    3536}
    3637/*}}}*/
     
    4041        this->M=pM;
    4142        this->N=pN;
    42         this->matrix=(double*)xcalloc(pM*pN,sizeof(double));
     43        this->matrix=NULL;
     44        if(M*N) this->matrix=(double*)xcalloc(pM*pN,sizeof(double));
    4345}
    4446/*}}}*/
     
    5052        this->M=pM;
    5153        this->N=pN;
    52         this->matrix=(double*)xcalloc(pM*pN,sizeof(double));
    53         memcpy(this->matrix,serial_mat,pM*pN*sizeof(double));
     54        this->matrix=NULL;
     55        if(M*N){
     56                this->matrix=(double*)xcalloc(pM*pN,sizeof(double));
     57                memcpy(this->matrix,serial_mat,pM*pN*sizeof(double));
     58        }
    5459
    5560}
     
    6065        this->M=pM;
    6166        this->N=pN;
    62         this->matrix=(double*)xcalloc(pM*pN,sizeof(double));
     67        this->matrix=NULL;
     68        if(M*N)this->matrix=(double*)xcalloc(pM*pN,sizeof(double));
    6369}
    6470/*}}}*/
     
    9197mxArray* SeqMat::ToMatlabMatrix(void){
    9298
     99        /*Intermediary: */
    93100        double* buffer=NULL;
    94        
     101        mxArray* pfield=NULL;
     102       
     103        /*output: */
    95104        mxArray* dataref=NULL;
    96105
    97106        /*copy vector into a new buffer: */
    98         buffer=(double*)xmalloc(this->M*this->N*sizeof(double));
    99         memcpy(buffer,this->matrix,M*N*sizeof(double));
    100 
    101         dataref = mxCreateDoubleMatrix(0,0,mxREAL);
    102         mxSetM(dataref,this->M);
    103         mxSetN(dataref,this->N);
    104         mxSetPr(dataref,buffer);       
    105 
     107        if(this->M*this->N){
     108                buffer=(double*)xmalloc(this->M*this->N*sizeof(double));
     109                memcpy(buffer,this->matrix,M*N*sizeof(double));
     110
     111                pfield=mxCreateDoubleMatrix(0,0,mxREAL);
     112                mxSetM(pfield,this->N);
     113                mxSetN(pfield,this->M);
     114                mxSetPr(pfield,buffer);
     115               
     116                //transpose the matrix, written directly to matlab! from C to matlab.
     117                mexCallMATLAB(1,&dataref, 1, &pfield, "transpose");
     118        }
     119        else dataref=mxCreateDoubleMatrix(0,0,mxREAL);
    106120
    107121        /*do not erase buffer!: */
     
    109123
    110124}
     125
     126
     127       
     128       
    111129/*}}}*/
    112130/*FUNCTION MatlabMatrixToSeqMat{{{1*/
  • issm/trunk-jpl/src/c/toolkits/issm/SeqVec.cpp

    r11733 r11762  
    3030
    3131        this->M=pM;
     32        this->vector=NULL;
    3233        if(this->M) this->vector=(double*)xcalloc(pM,sizeof(double));
    33         else this->vector=NULL;
    3434}
    3535/*}}}*/
     
    4040
    4141        this->M=pM;
    42         this->vector=(double*)xcalloc(pM,sizeof(double));
    43         memcpy(this->vector,buffer,pM*sizeof(double));
     42        this->vector=NULL;
     43        if(this->M){
     44                this->vector=(double*)xcalloc(pM,sizeof(double));
     45                memcpy(this->vector,buffer,pM*sizeof(double));
     46        }
    4447}
    4548/*}}}*/
     
    7275
    7376        /*copy vector into a new buffer: */
    74         buffer=(double*)xmalloc(this->M*sizeof(double));
    75         memcpy(buffer,vector,M*sizeof(double));
    76 
    77         dataref = mxCreateDoubleMatrix(0,0,mxREAL);
    78         mxSetM(dataref,this->M);
    79         mxSetN(dataref,1);
    80         mxSetPr(dataref,buffer);       
     77        if(this->M){
     78                buffer=(double*)xmalloc(this->M*sizeof(double));
     79                memcpy(buffer,vector,M*sizeof(double));
     80
     81                dataref = mxCreateDoubleMatrix(0,0,mxREAL);
     82                mxSetM(dataref,this->M);
     83                mxSetN(dataref,1);
     84                mxSetPr(dataref,buffer);       
     85        }
     86        else dataref = mxCreateDoubleMatrix(0,0,mxREAL);
    8187
    8288
Note: See TracChangeset for help on using the changeset viewer.