[cig-commits] r11503 - short/3D/PyLith/trunk/libsrc/meshio

brad at geodynamics.org brad at geodynamics.org
Sat Mar 22 10:53:36 PDT 2008


Author: brad
Date: 2008-03-22 10:53:36 -0700 (Sat, 22 Mar 2008)
New Revision: 11503

Modified:
   short/3D/PyLith/trunk/libsrc/meshio/PsetFileBinary.cc
Log:
Fixed bug related to 32bit/64bit I/O for binary Pset files. Need to use int32_t and int64_t for integers.

Modified: short/3D/PyLith/trunk/libsrc/meshio/PsetFileBinary.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/meshio/PsetFileBinary.cc	2008-03-22 15:45:42 UTC (rev 11502)
+++ short/3D/PyLith/trunk/libsrc/meshio/PsetFileBinary.cc	2008-03-22 17:53:36 UTC (rev 11503)
@@ -25,9 +25,8 @@
 #include <assert.h> // USES assert()
 #include <sstream> // USES std::ostringstream
 #include <stdexcept> // USES std::exception
+#include <sys/types.h> // USES int32_t, int64_t
 
-#include <iostream>
-
 // ----------------------------------------------------------------------
 const char* pylith::meshio::PsetFileBinary::_HEADER = "pset unformatted";
 
@@ -75,10 +74,10 @@
 
   if (_ioInt32) {
     // Read number of psets
-    int numGroups = 0;
-    fin.read((char*) &numGroups, sizeof(int));
+    int32_t numGroups = 0;
+    fin.read((char*) &numGroups, sizeof(numGroups));
     if (_flipEndian)
-      BinaryIO::swapByteOrder((char*) &numGroups, 1, sizeof(int));
+      BinaryIO::swapByteOrder((char*) &numGroups, 1, sizeof(numGroups));
     assert(numGroups >= 0);
     groups->resize(numGroups);
     std::string extra = BinaryIO::readString(fin, 2*_recordHeaderSize);
@@ -90,7 +89,7 @@
       _readPset32(fin, &(*groups)[iGroup]);
   } else {
     // Read number of psets
-    long numGroups = 0;
+    int64_t numGroups = 0;
     fin.read((char*) &numGroups, sizeof(numGroups));
     if (_flipEndian)
       BinaryIO::swapByteOrder((char*) &numGroups, 1, sizeof(numGroups));
@@ -129,7 +128,7 @@
 
   if (_ioInt32) {
     // Write number of groups
-    int numGroups = groups.size();
+    int32_t numGroups = groups.size();
     if (_flipEndian)
       BinaryIO::swapByteOrder((char*) &numGroups, 1, sizeof(numGroups));
     fout.write((char*) &numGroups, sizeof(numGroups));
@@ -141,7 +140,7 @@
       _writePset32(fout, groups[iGroup]);
   } else {
     // Write number of groups
-    long numGroups = groups.size();
+    int64_t numGroups = groups.size();
     if (_flipEndian)
       BinaryIO::swapByteOrder((char*) &numGroups, 1, sizeof(numGroups));
     fout.write((char*) &numGroups, sizeof(numGroups));
@@ -190,13 +189,13 @@
 
   group->name = BinaryIO::readString(fin, 32);
 
-  int id = 0;
-  fin.read((char*) &id, sizeof(int));
+  int32_t id = 0;
+  fin.read((char*) &id, sizeof(id));
   if (_flipEndian)
     BinaryIO::swapByteOrder((char*) &id, 1, sizeof(id));
 
-  int size = 0;
-  fin.read((char*) &size, sizeof(int));
+  int32_t size = 0;
+  fin.read((char*) &size, sizeof(size));
   if (_flipEndian)
     BinaryIO::swapByteOrder((char*) &size, 1, sizeof(size));
   assert(size >= 0);
@@ -206,10 +205,10 @@
        << " points." << journal::endl;
 
   group->points.resize(size);
-  fin.read((char*) &group->points[0], size*sizeof(int));
+  fin.read((char*) &group->points[0], size*sizeof(int32_t));
   extra = BinaryIO::readString(fin, 2*_recordHeaderSize);
   if (_flipEndian)
-    BinaryIO::swapByteOrder((char*) &group->points[0], size, sizeof(int));
+    BinaryIO::swapByteOrder((char*) &group->points[0], size, sizeof(int32_t));
 
   group->points -= 1; // use zero base
 
@@ -230,21 +229,21 @@
 
   fout.write((char*) group.name.c_str(), 32);
 
-  int id = group.id;
+  int32_t id = group.id;
   if (_flipEndian)
     BinaryIO::swapByteOrder((char*) &id, 1, sizeof(id));
-  fout.write((char*) &id, sizeof(int));
+  fout.write((char*) &id, sizeof(id));
 
-  int sizeIO = size;
+  int32_t sizeIO = size;
   if (_flipEndian)
     BinaryIO::swapByteOrder((char*) &sizeIO, 1, sizeof(sizeIO));
-  fout.write((char*) &sizeIO, sizeof(int));
+  fout.write((char*) &sizeIO, sizeof(sizeIO));
 
-  int_array pointsIO(group.points);
+  std::valarray<int32_t> pointsIO(group.points);
   pointsIO += 1; // switch from zero base to one base
   if (_flipEndian)
-    BinaryIO::swapByteOrder((char*) &pointsIO[0], size, sizeof(int));
-  fout.write((char*) &pointsIO[0], size*sizeof(int));
+    BinaryIO::swapByteOrder((char*) &pointsIO[0], size, sizeof(int32_t));
+  fout.write((char*) &pointsIO[0], size*sizeof(int32_t));
 
   info << journal::at(__HERE__)
        << "Done." << journal::endl;
@@ -261,12 +260,12 @@
 
   group->name = BinaryIO::readString(fin, 32);
 
-  long id = 0;
+  int64_t id = 0;
   fin.read((char*) &id, sizeof(id));
   if (_flipEndian)
     BinaryIO::swapByteOrder((char*) &id, 1, sizeof(id));
 
-  long size = 0;
+  int64_t size = 0;
   fin.read((char*) &size, sizeof(size));
   if (_flipEndian)
     BinaryIO::swapByteOrder((char*) &size, 1, sizeof(size));
@@ -277,11 +276,11 @@
        << " points." << journal::endl;
 
   group->points.resize(size);
-  std::valarray<long> pointsIO(size);
-  fin.read((char*) &pointsIO[0], size*sizeof(long));
+  std::valarray<int64_t> pointsIO(size);
+  fin.read((char*) &pointsIO[0], size*sizeof(int64_t));
   extra = BinaryIO::readString(fin, 2*_recordHeaderSize);
   if (_flipEndian)
-    BinaryIO::swapByteOrder((char*) &pointsIO[0], size, sizeof(long));
+    BinaryIO::swapByteOrder((char*) &pointsIO[0], size, sizeof(int64_t));
 
   for (int i=0; i < size; ++i)
     group->points[i] = pointsIO[i];
@@ -305,21 +304,21 @@
 
   fout.write((char*) group.name.c_str(), 32);
 
-  long id = group.id;
+  int64_t id = group.id;
   if (_flipEndian)
     BinaryIO::swapByteOrder((char*) &id, 1, sizeof(id));
   fout.write((char*) &id, sizeof(int));
 
-  long sizeIO = size;
+  int64_t sizeIO = size;
   if (_flipEndian)
     BinaryIO::swapByteOrder((char*) &sizeIO, 1, sizeof(sizeIO));
   fout.write((char*) &sizeIO, sizeof(int));
 
-  std::valarray<long> pointsIO(size);
+  std::valarray<int64_t> pointsIO(size);
   pointsIO += 1; // switch from zero base to one base
   if (_flipEndian)
-    BinaryIO::swapByteOrder((char*) &pointsIO[0], size, sizeof(long));
-  fout.write((char*) &pointsIO[0], size*sizeof(long));
+    BinaryIO::swapByteOrder((char*) &pointsIO[0], size, sizeof(int64_t));
+  fout.write((char*) &pointsIO[0], size*sizeof(int64_t));
 
   info << journal::at(__HERE__)
        << "Done." << journal::endl;



More information about the cig-commits mailing list