From d388216a2525fe23602816f2b09d9c6dd88206e3 Mon Sep 17 00:00:00 2001
From: Mark Olesen <Mark.Olesen@esi-group.com>
Date: Mon, 23 Oct 2017 07:50:12 +0200
Subject: [PATCH] ENH: add reset() method to IStringStream

- for convenience and symmetry with OStringStream

STYLE: void return value for stream rewind() methods

- this makes it easier to design bidirectional streams
---
 .../test/IStringStream/Test-IStringStream.C      | 16 +++++++++-------
 src/OpenFOAM/db/IOstreams/Fstreams/IFstream.C    |  4 +---
 src/OpenFOAM/db/IOstreams/Fstreams/IFstream.H    |  2 +-
 src/OpenFOAM/db/IOstreams/IOstreams/Istream.H    |  4 ++--
 src/OpenFOAM/db/IOstreams/Pstreams/UIPstream.C   |  3 +--
 src/OpenFOAM/db/IOstreams/Pstreams/UIPstream.H   |  4 ++--
 src/OpenFOAM/db/IOstreams/Sstreams/ISstream.C    |  4 +---
 src/OpenFOAM/db/IOstreams/Sstreams/ISstream.H    |  6 +++---
 src/OpenFOAM/db/IOstreams/Sstreams/OSstream.H    |  2 +-
 .../db/IOstreams/StringStreams/StringStream.H    |  7 +++++++
 src/OpenFOAM/db/IOstreams/Tstreams/ITstream.C    |  4 +---
 src/OpenFOAM/db/IOstreams/Tstreams/ITstream.H    |  4 ++--
 .../{dummyISstream => dummy}/dummyISstream.H     |  5 ++---
 .../{dummyIstream => dummy}/dummyIstream.H       |  4 ++--
 14 files changed, 35 insertions(+), 34 deletions(-)
 rename src/OpenFOAM/db/IOstreams/{dummyISstream => dummy}/dummyISstream.H (96%)
 rename src/OpenFOAM/db/IOstreams/{dummyIstream => dummy}/dummyIstream.H (97%)

diff --git a/applications/test/IStringStream/Test-IStringStream.C b/applications/test/IStringStream/Test-IStringStream.C
index cd8ba0e2a6..b265b15a61 100644
--- a/applications/test/IStringStream/Test-IStringStream.C
+++ b/applications/test/IStringStream/Test-IStringStream.C
@@ -36,20 +36,22 @@ using namespace Foam;
 
 int main(int argc, char *argv[])
 {
-    IStringStream testStream(Foam::string("1002 sfsd sdfsd"));
+    IStringStream testStream(Foam::string("  1002  abcd  defg;"));
 
     label i(readLabel(testStream));
 
-    Info<< i << endl;
+    Info<< "label=" << i << nl;
 
-    word bla(testStream);
-    word bla2(testStream);
+    word w1(testStream);
+    word w2(testStream);
 
-    Info<< bla << tab << bla2 << endl;
+    Info<< "word=" << w1 << nl;
+    Info<< "word=" << w2 << nl;
 
-    wordList wl(IStringStream("(hello1")());
+    testStream.reset("(hello1)");
 
-    Info<< wl << endl;
+    wordList wl(testStream);
+    Info<< wl << nl;
 
     Info<< "\nEnd\n" << endl;
 
diff --git a/src/OpenFOAM/db/IOstreams/Fstreams/IFstream.C b/src/OpenFOAM/db/IOstreams/Fstreams/IFstream.C
index fd3889618e..f1c97306ed 100644
--- a/src/OpenFOAM/db/IOstreams/Fstreams/IFstream.C
+++ b/src/OpenFOAM/db/IOstreams/Fstreams/IFstream.C
@@ -167,7 +167,7 @@ const std::istream& Foam::IFstream::stdStream() const
 }
 
 
-Foam::Istream& Foam::IFstream::rewind()
+void Foam::IFstream::rewind()
 {
     lineNumber_ = 1;      // Reset line number
 
@@ -195,8 +195,6 @@ Foam::Istream& Foam::IFstream::rewind()
     {
         ISstream::rewind();
     }
-
-    return *this;
 }
 
 
diff --git a/src/OpenFOAM/db/IOstreams/Fstreams/IFstream.H b/src/OpenFOAM/db/IOstreams/Fstreams/IFstream.H
index 72f89873c5..34f7c7c948 100644
--- a/src/OpenFOAM/db/IOstreams/Fstreams/IFstream.H
+++ b/src/OpenFOAM/db/IOstreams/Fstreams/IFstream.H
@@ -130,7 +130,7 @@ public:
         virtual const std::istream& stdStream() const;
 
         //- Rewind the stream so that it may be read again
-        virtual Istream& rewind();
+        virtual void rewind();
 
 
       // Print
diff --git a/src/OpenFOAM/db/IOstreams/IOstreams/Istream.H b/src/OpenFOAM/db/IOstreams/IOstreams/Istream.H
index 7713176196..24df823bdd 100644
--- a/src/OpenFOAM/db/IOstreams/IOstreams/Istream.H
+++ b/src/OpenFOAM/db/IOstreams/IOstreams/Istream.H
@@ -131,8 +131,8 @@ public:
             //- Read binary block
             virtual Istream& read(char*, std::streamsize) = 0;
 
-            //- Rewind and return the stream so that it may be read again
-            virtual Istream& rewind() = 0;
+            //- Rewind the stream so that it may be read again
+            virtual void rewind() = 0;
 
 
         // Read List punctuation tokens
diff --git a/src/OpenFOAM/db/IOstreams/Pstreams/UIPstream.C b/src/OpenFOAM/db/IOstreams/Pstreams/UIPstream.C
index 333aeca259..21b412fce3 100644
--- a/src/OpenFOAM/db/IOstreams/Pstreams/UIPstream.C
+++ b/src/OpenFOAM/db/IOstreams/Pstreams/UIPstream.C
@@ -329,10 +329,9 @@ Foam::Istream& Foam::UIPstream::read(char* data, std::streamsize count)
 }
 
 
-Foam::Istream& Foam::UIPstream::rewind()
+void Foam::UIPstream::rewind()
 {
     externalBufPosition_ = 0;
-    return *this;
 }
 
 
diff --git a/src/OpenFOAM/db/IOstreams/Pstreams/UIPstream.H b/src/OpenFOAM/db/IOstreams/Pstreams/UIPstream.H
index 4913693741..d0c0f86552 100644
--- a/src/OpenFOAM/db/IOstreams/Pstreams/UIPstream.H
+++ b/src/OpenFOAM/db/IOstreams/Pstreams/UIPstream.H
@@ -171,8 +171,8 @@ public:
             //- Read binary block with 8-byte alignment.
             Istream& read(char* data, const std::streamsize count);
 
-            //- Rewind and return the stream so that it may be read again
-            Istream& rewind();
+            //- Rewind the stream so that it may be read again
+            void rewind();
 
 
         // Edit
diff --git a/src/OpenFOAM/db/IOstreams/Sstreams/ISstream.C b/src/OpenFOAM/db/IOstreams/Sstreams/ISstream.C
index 40c2d8e595..15ad568f18 100644
--- a/src/OpenFOAM/db/IOstreams/Sstreams/ISstream.C
+++ b/src/OpenFOAM/db/IOstreams/Sstreams/ISstream.C
@@ -798,7 +798,7 @@ Foam::Istream& Foam::ISstream::read(char* buf, std::streamsize count)
 }
 
 
-Foam::Istream& Foam::ISstream::rewind()
+void Foam::ISstream::rewind()
 {
     lineNumber_ = 1;      // Reset line number
 
@@ -807,8 +807,6 @@ Foam::Istream& Foam::ISstream::rewind()
 
     // pubseekpos() rather than seekg() so that it works with gzstream
     stdStream().rdbuf()->pubseekpos(0, std::ios_base::in);
-
-    return *this;
 }
 
 
diff --git a/src/OpenFOAM/db/IOstreams/Sstreams/ISstream.H b/src/OpenFOAM/db/IOstreams/Sstreams/ISstream.H
index 18890e2087..4a2b510b5b 100644
--- a/src/OpenFOAM/db/IOstreams/Sstreams/ISstream.H
+++ b/src/OpenFOAM/db/IOstreams/Sstreams/ISstream.H
@@ -82,7 +82,7 @@ public:
 
     // Constructors
 
-        //- Construct as wrapper around istream
+        //- Construct as wrapper around std::istream
         inline ISstream
         (
             std::istream& is,
@@ -163,8 +163,8 @@ public:
             //- Read binary block
             virtual Istream& read(char* buf, std::streamsize count);
 
-            //- Rewind and return the stream so that it may be read again
-            virtual Istream& rewind();
+            //- Rewind the stream so that it may be read again
+            virtual void rewind();
 
 
         // Stream state functions
diff --git a/src/OpenFOAM/db/IOstreams/Sstreams/OSstream.H b/src/OpenFOAM/db/IOstreams/Sstreams/OSstream.H
index 158f7123ec..2dd13c50fb 100644
--- a/src/OpenFOAM/db/IOstreams/Sstreams/OSstream.H
+++ b/src/OpenFOAM/db/IOstreams/Sstreams/OSstream.H
@@ -69,7 +69,7 @@ public:
 
     // Constructors
 
-        //- Construct and set stream status
+        //- Construct as wrapper around std::ostream and set stream status
         OSstream
         (
             std::ostream& os,
diff --git a/src/OpenFOAM/db/IOstreams/StringStreams/StringStream.H b/src/OpenFOAM/db/IOstreams/StringStreams/StringStream.H
index 1bdbad9adb..91b1a7ce34 100644
--- a/src/OpenFOAM/db/IOstreams/StringStreams/StringStream.H
+++ b/src/OpenFOAM/db/IOstreams/StringStreams/StringStream.H
@@ -171,6 +171,13 @@ public:
         //- Print description to Ostream
         void print(Ostream& os) const;
 
+        //- Reset the input buffer and rewind the stream
+        void reset(const std::string& s)
+        {
+            this->str(s);
+            this->rewind();
+        }
+
 
     // Member operators
 
diff --git a/src/OpenFOAM/db/IOstreams/Tstreams/ITstream.C b/src/OpenFOAM/db/IOstreams/Tstreams/ITstream.C
index c9dae12294..c0890dad9d 100644
--- a/src/OpenFOAM/db/IOstreams/Tstreams/ITstream.C
+++ b/src/OpenFOAM/db/IOstreams/Tstreams/ITstream.C
@@ -154,7 +154,7 @@ Foam::Istream& Foam::ITstream::read(char*, std::streamsize)
 }
 
 
-Foam::Istream& Foam::ITstream::rewind()
+void Foam::ITstream::rewind()
 {
     tokenIndex_ = 0;
 
@@ -164,8 +164,6 @@ Foam::Istream& Foam::ITstream::rewind()
     }
 
     setGood();
-
-    return *this;
 }
 
 
diff --git a/src/OpenFOAM/db/IOstreams/Tstreams/ITstream.H b/src/OpenFOAM/db/IOstreams/Tstreams/ITstream.H
index 26617cb37e..b8414cc4f2 100644
--- a/src/OpenFOAM/db/IOstreams/Tstreams/ITstream.H
+++ b/src/OpenFOAM/db/IOstreams/Tstreams/ITstream.H
@@ -188,8 +188,8 @@ public:
             //- Read binary block
             virtual Istream& read(char*, std::streamsize);
 
-            //- Rewind and return the stream so that it may be read again
-            virtual Istream& rewind();
+            //- Rewind the stream so that it may be read again
+            virtual void rewind();
 
 
         // Edit
diff --git a/src/OpenFOAM/db/IOstreams/dummyISstream/dummyISstream.H b/src/OpenFOAM/db/IOstreams/dummy/dummyISstream.H
similarity index 96%
rename from src/OpenFOAM/db/IOstreams/dummyISstream/dummyISstream.H
rename to src/OpenFOAM/db/IOstreams/dummy/dummyISstream.H
index 9477b08791..fa0b441dc2 100644
--- a/src/OpenFOAM/db/IOstreams/dummyISstream/dummyISstream.H
+++ b/src/OpenFOAM/db/IOstreams/dummy/dummyISstream.H
@@ -126,11 +126,10 @@ public:
                 return *this;
             }
 
-            //- Rewind and return the stream so that it may be read again
-            virtual Istream& rewind()
+            //- Rewind the stream so that it may be read again
+            virtual void rewind()
             {
                 NotImplemented;
-                return *this;
             }
 
             //- Return flags of stream
diff --git a/src/OpenFOAM/db/IOstreams/dummyIstream/dummyIstream.H b/src/OpenFOAM/db/IOstreams/dummy/dummyIstream.H
similarity index 97%
rename from src/OpenFOAM/db/IOstreams/dummyIstream/dummyIstream.H
rename to src/OpenFOAM/db/IOstreams/dummy/dummyIstream.H
index 9e8549820d..b15f892ec2 100644
--- a/src/OpenFOAM/db/IOstreams/dummyIstream/dummyIstream.H
+++ b/src/OpenFOAM/db/IOstreams/dummy/dummyIstream.H
@@ -127,8 +127,8 @@ public:
                 return *this;
             }
 
-            //- Rewind and return the stream so that it may be read again
-            virtual Istream& rewind()
+            //- Rewind the stream so that it may be read again
+            virtual void rewind()
             {
                 NotImplemented;
                 return *this;
-- 
GitLab