Changeset 5d57155 for GenericIO.cxx


Ignore:
Timestamp:
09/25/17 16:15:39 (7 years ago)
Author:
Hal Finkel <hfinkel@…>
Branches:
master, pympi
Children:
b02d091
Parents:
fb69232
git-author:
Hal Finkel <hfinkel@…> (09/25/17 16:15:39)
git-committer:
Hal Finkel <hfinkel@…> (09/25/17 16:15:39)
Message:

Add support for float4 (and other homogeneous aggregates)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • GenericIO.cxx

    r14e73bb r5d57155  
    322322  endian_specific_value<uint64_t, IsBigEndian> Flags; 
    323323  endian_specific_value<uint64_t, IsBigEndian> Size; 
     324  endian_specific_value<uint64_t, IsBigEndian> ElementSize; 
    324325}; 
    325326 
     
    583584      VH->Flags = VFlags; 
    584585      RecordSize += VH->Size = Vars[i].Size; 
     586      VH->ElementSize = Vars[i].ElementSize; 
    585587    } 
    586588 
     
    13791381      } 
    13801382 
     1383      size_t ElementSize = VH->Size; 
     1384      if (offsetof_safe(VH, ElementSize) < GH->VarsSize) 
     1385        ElementSize = VH->ElementSize; 
     1386 
    13811387      VarFound = true; 
    13821388      bool IsFloat = (bool) (VH->Flags & FloatValue), 
     
    13871393              " in: " << OpenFileName << ": current: " << Vars[i].Size << 
    13881394              ", file: " << VH->Size; 
     1395        throw runtime_error(ss.str()); 
     1396      } else if (ElementSize != Vars[i].ElementSize) { 
     1397        stringstream ss; 
     1398        ss << "Element size mismatch for variable " << Vars[i].Name << 
     1399              " in: " << OpenFileName << ": current: " << Vars[i].ElementSize << 
     1400              ", file: " << ElementSize; 
    13891401        throw runtime_error(ss.str()); 
    13901402      } else if (IsFloat != Vars[i].IsFloat) { 
     
    15651577      // Byte swap the data if necessary. 
    15661578      if (IsBigEndian != isBigEndian()) 
    1567         for (size_t j = 0; j < RH->NElems; ++j) { 
    1568           char *Offset = ((char *) VarData) + j*Vars[i].Size; 
    1569           bswap(Offset, Vars[i].Size); 
     1579        for (size_t j = 0; 
     1580             j < RH->NElems*(Vars[i].Size/Vars[i].ElementSize); ++j) { 
     1581          char *Offset = ((char *) VarData) + j*Vars[i].ElementSize; 
     1582          bswap(Offset, Vars[i].ElementSize); 
    15701583        } 
    15711584 
     
    16251638    if (VNameNull < NameSize) 
    16261639      VName.resize(VNameNull); 
     1640 
     1641    size_t ElementSize = VH->Size; 
     1642    if (offsetof_safe(VH, ElementSize) < GH->VarsSize) 
     1643      ElementSize = VH->ElementSize; 
    16271644 
    16281645    bool IsFloat = (bool) (VH->Flags & FloatValue), 
     
    16341651    VI.push_back(VariableInfo(VName, (size_t) VH->Size, IsFloat, IsSigned, 
    16351652                              IsPhysCoordX, IsPhysCoordY, IsPhysCoordZ, 
    1636                               MaybePhysGhost)); 
     1653                              MaybePhysGhost, ElementSize)); 
    16371654  } 
    16381655} 
Note: See TracChangeset for help on using the changeset viewer.