[cig-commits] r4116 - cs/spatialdata-0.1/trunk/libsrc/utils
baagaard at geodynamics.org
baagaard at geodynamics.org
Thu Jul 27 14:08:37 PDT 2006
Author: baagaard
Date: 2006-07-27 14:08:37 -0700 (Thu, 27 Jul 2006)
New Revision: 4116
Modified:
cs/spatialdata-0.1/trunk/libsrc/utils/PointsStream.cc
Log:
Added more checking of stream state.
Modified: cs/spatialdata-0.1/trunk/libsrc/utils/PointsStream.cc
===================================================================
--- cs/spatialdata-0.1/trunk/libsrc/utils/PointsStream.cc 2006-07-27 21:06:30 UTC (rev 4115)
+++ cs/spatialdata-0.1/trunk/libsrc/utils/PointsStream.cc 2006-07-27 21:08:37 UTC (rev 4116)
@@ -17,6 +17,8 @@
#include <iomanip> // USES std::setprecision(), std::width()
#include <vector> // USES std::vector
#include <assert.h> // USES assert()
+#include <sstream> // USES std::ostringstream
+#include <stdexcept> // USES std::runtime_error
// ----------------------------------------------------------------------
// Default constructor
@@ -45,6 +47,13 @@
new std::ifstream(_filename.c_str()) :
&std::cin;
+ if (0 == pIn || !pIn->good()) {
+ std::string name = (0 != _filename.length()) ? _filename : "std::cin";
+ std::ostringstream msg;
+ msg << "Could not open intput stream '" << name << "' for reading points.";
+ throw std::runtime_error(msg.str());
+ } // if
+
size_t numPts = 0;
size_t numDims = 3;
@@ -63,6 +72,14 @@
if (pIn->good())
++numPts;
} // while
+ if (!pIn->eof() && !pIn->good()) {
+ std::string name = (0 != _filename.length()) ? _filename : "std::cin";
+ std::ostringstream msg;
+ msg << "Error occurred while reading points from input stream '"
+ << name << "'.";
+ throw std::runtime_error(msg.str());
+ } // if
+
if (&std::cin != pIn)
delete pIn;
@@ -90,6 +107,13 @@
new std::ofstream(_filename.c_str()) :
&std::cout;
+ if (0 == pOut || !pOut->good()) {
+ std::string name = (0 != _filename.length()) ? _filename : "std::cout";
+ std::ostringstream msg;
+ msg << "Could not open output stream '" << name << "' for writing points.";
+ throw std::runtime_error(msg.str());
+ } // if
+
*pOut
<< std::resetiosflags(std::ios::fixed)
<< std::setiosflags(std::ios::scientific)
@@ -101,6 +125,14 @@
*pOut << "\n";
} // for
+ if (!pOut->good()) {
+ std::string name = (0 != _filename.length()) ? _filename : "std::cout";
+ std::ostringstream msg;
+ msg << "Error occurred while writing points to output stream '"
+ << name << "'.";
+ throw std::runtime_error(msg.str());
+ } // if
+
if (&std::cout != pOut)
delete pOut;
} // write
More information about the cig-commits
mailing list