Changeset 12912


Ignore:
Timestamp:
08/06/12 11:30:55 (13 years ago)
Author:
jschierm
Message:

Removed doubly dimensioned arrays from KML classes.

Location:
issm/trunk-jpl/src/c/classes/objects/KML
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/c/classes/objects/KML/KMLFileReadUtils.cpp

    r12835 r12912  
    586586/*}}}*/
    587587/*FUNCTION  KMLFileTokenParse {{{*/
    588 int KMLFileTokenParse(double (**pdval3)[3],int* m,int maxlen,
     588int KMLFileTokenParse(double **pdval,int* m,int n,int maxlen,
    589589                                          char* ktag,
    590590                                          FILE* fid){
    591591
    592         int     i=0,j=-1;
     592        int     i=-1,j=-1;
    593593        char*   kstr;
    594594        char*   ktok;
     
    600600                                                        NULL,NULL)) ||
    601601                (kstr[0] == '<'))
    602                 _error2_("KMLFileTokenParse -- Missing double [m x 3] field for " << ktag << ".\n");
    603 
    604         if (!*pdval3)
     602                _error2_("KMLFileTokenParse -- Missing double [m x n] field for " << ktag << ".\n");
     603
     604        if (!*pdval)
    605605                if (maxlen)
    606                         *pdval3=(double (*)[3]) xmalloc((maxlen*3)          *sizeof(double));
    607                 else
    608                         *pdval3=(double (*)[3]) xmalloc(((strlen(kstr)+1)/2)*sizeof(double));
     606                        *pdval=(double *) xmalloc((maxlen*n)          *sizeof(double));
     607                else
     608                        *pdval=(double *) xmalloc(((strlen(kstr)+1)/2)*sizeof(double));
    609609
    610610/*  loop through string to get all values  */
     
    612612        ktok=strtok(kstr,delim);
    613613        while (ktok) {
    614                 j++;
    615                 if (j == 3) {
    616                         i++;
    617                         j=0;
    618                         if (maxlen && (maxlen < i+1))
    619                                 _error2_("KMLFileTokenParse -- Double [m x 3] field too short for " << ktag << ".\n");
    620                 }
    621                 sscanf(ktok,"%lg",&((*pdval3)[i][j]));
     614                i++;
     615                if (maxlen && (maxlen*n < i+1))
     616                        _error2_("KMLFileTokenParse -- Double [m x n] field too short for " << ktag << ".\n");
     617                j=(j+1) % n;
     618                sscanf(ktok,"%lg",&((*pdval)[i]));
    622619                ktok=strtok(NULL,delim);
    623620        }
     
    625622
    626623        if (!maxlen)
    627                 *pdval3=(double (*)[3]) xrealloc(*pdval3,((i+1)*3)*sizeof(double));
     624                *pdval=(double *) xrealloc(*pdval,((i+1)*n)*sizeof(double));
    628625
    629626        if (m)
    630                 *m=i+1;
    631 
    632         if (j != 2)
    633                 _pprintLine_("KMLFileTokenParse -- Double [m x 3] field for " << ktag << " does not have multiple of 3 values.");
     627                *m=((i+1)+(n-1))/n;
     628
     629        if ((i+1) % n)
     630                _pprintLine_("KMLFileTokenParse -- Double [m x n] field for " << ktag << " does not have multiple of n values.");
    634631
    635632/*  get additional token and compare to closing tag  */
     
    647644//      _pprintLine_("KMLFileTokenParse -- " << ktag << "=...");
    648645//      for (j=0; j<=i; j++)
    649 //              _pprintLine_("   [" << j << "][0-2]: " << (*pdval3)[j][0] << "g," << (*pdval3)[j][1] << "g," << (*pdval3)[j][2] << "g");
     646//              _pprintLine_("   [" << j << "]: " << (*pdval)[j] << "g");
    650647
    651648        return(0);
  • issm/trunk-jpl/src/c/classes/objects/KML/KMLFileReadUtils.h

    r12832 r12912  
    4848                                          char* ktag,
    4949                                          FILE* fid);
    50 int KMLFileTokenParse(double (**pdval3)[3],int* m,int maxlen,
     50int KMLFileTokenParse(double **pdval,int* m,int n,int maxlen,
    5151                                          char* ktag,
    5252                                          FILE* fid);
  • issm/trunk-jpl/src/c/classes/objects/KML/KML_LinearRing.cpp

    r12835 r12912  
    150150                        KMLFileTokenParse(altmode,NULL,KML_LINEARRING_ALTMODE_LENGTH,kstri,fid);
    151151                else if (!strcmp(kstri,"<coordinates>"))
    152                         KMLFileTokenParse(&coords,&ncoord,0,kstri,fid);
     152                        KMLFileTokenParse(&coords,&ncoord,3,0,kstri,fid);
    153153                else if (!strncmp(kstri,"<",1))
    154154                        KML_Geometry::Read(fid,kstri);
Note: See TracChangeset for help on using the changeset viewer.