sstream.tcc (seekpos): Minor rearrangement of two conditionals consistently with...
authorPaolo Carlini <pcarlini@suse.de>
Fri, 1 Oct 2004 09:22:49 +0000 (09:22 +0000)
committerPaolo Carlini <paolo@gcc.gnu.org>
Fri, 1 Oct 2004 09:22:49 +0000 (09:22 +0000)
2004-10-01  Paolo Carlini  <pcarlini@suse.de>

* include/bits/sstream.tcc (seekpos): Minor rearrangement of two
conditionals consistently with seekoff.
* include/std/std_sstream.h (setbuf): Avoid a string temporary.
(_M_sync): Simplify a bit, clean-up comment.

From-SVN: r88389

libstdc++-v3/ChangeLog
libstdc++-v3/include/bits/sstream.tcc
libstdc++-v3/include/std/std_sstream.h

index 2e928168b2872e2075ed8ac9307abb112dee0a42..88bd3a757680a64a09087389deaa195cbce99b1d 100644 (file)
@@ -1,3 +1,10 @@
+2004-10-01  Paolo Carlini  <pcarlini@suse.de>
+
+       * include/bits/sstream.tcc (seekpos): Minor rearrangement of two
+       conditionals consistently with seekoff.
+       * include/std/std_sstream.h (setbuf): Avoid a string temporary.
+       (_M_sync): Simplify a bit, clean-up comment.
+
 2004-09-30  Paolo Carlini  <pcarlini@suse.de>
 
        PR libstdc++/10975 (DR 453)
index 1b1232e9175515807d96f898b1c6770c7938331b..19a24bf0f189b938d4fb5cdc8e249a66e6568917 100644 (file)
@@ -187,14 +187,14 @@ namespace std
       const bool __testout = (ios_base::out & this->_M_mode & __mode) != 0;
 
       const char_type* __beg = __testin ? this->eback() : this->pbase();
-      if (__beg)
+      if (__beg && (__testin || __testout))
        {
          _M_update_egptr();
 
-         off_type __pos(__sp);
+         const off_type __pos(__sp);
          const bool __testpos = 0 <= __pos
                                 && __pos <=  this->egptr() - __beg;
-         if ((__testin || __testout) && __testpos)
+         if (__testpos)
            {
              if (__testin)
                this->gbump((__beg + __pos) - this->gptr());
index 0a6738adf8ad539b39d3150184f069a4258fa150..3420999164c09066eee0a6c14efda28c0e95a055 100644 (file)
@@ -219,7 +219,7 @@ namespace std
            // things will quickly blow up.
            
            // Step 1: Destroy the current internal array.
-           _M_string = __string_type(__s, __n);
+           _M_string.assign(__s, __n);
            
            // Step 2: Use the external array.
            _M_sync(__s, 0, 0);
@@ -253,20 +253,19 @@ namespace std
       {
        const bool __testin = this->_M_mode & ios_base::in;
        const bool __testout = this->_M_mode & ios_base::out;
-       const __size_type __len = _M_string.size();
+       char_type* __end = __base + _M_string.size();
 
        if (__testin)
-         this->setg(__base, __base + __i, __base + __len);
+         this->setg(__base, __base + __i, __end);
        if (__testout)
          {
            this->setp(__base, __base + _M_string.capacity());
            this->pbump(__o);
-           // We need a pointer to the string end anyway, even when
-           // !__testin: in that case, however, for the correct
-           // functioning of the streambuf inlines all the get area
-           // pointers must be identical.
+           // egptr() always tracks the string end. When !__testin,
+           // for the correct functioning of the streambuf inlines
+           // the other get area pointers are identical.
            if (!__testin)
-             this->setg(__base + __len, __base + __len, __base + __len);
+             this->setg(__end, __end, __end);
          }
       }