std::basic_stringbuf::seekpos(3)

NAME
std::basic_stringbuf::seekpos - std::basic_stringbuf::seekpos

Synopsis
   protected:
   virtual pos_type seekpos( pos_type sp,
                        std::ios_base::openmode which = std::ios_base::in |
   std::ios_base::out );
   Repositions std::basic_streambuf::gptr and/or std::basic_streambuf::pptr, if
   possible, to the position indicated by sp.
   Effectively executes seekoff(off_type(sp), std::ios_base::beg, which).

Parameters
   sp - stream position, such as one obtained by seekoff() or seekpos()
           defines whether the input sequences, the output sequence, or both are
           affected. It can be one or a combination of the following constants:
   which -
           Constant Explanation
           in affect the input sequence
           out affect the output sequence

Return value
   sp on success or pos_type(off_type(-1)) on failure.

Notes
   seekpos() is called by std::basic_streambuf::pubseekpos(), which is called by the
   single-argument versions of std::basic_istream::seekg() and
   std::basic_ostream::seekp().

Example
// Run this code
 #include <sstream>
 #include <iostream>
 struct mybuf : std::stringbuf
 {
     mybuf(const std::string& str) : std::stringbuf(str) {}
     pos_type seekpos(pos_type sp, std::ios_base::openmode which)
     {
         std::cout << "Before seekpos(" << sp << "), size of the get area is "
                   << egptr() - eback() << " with "
                   << egptr() - gptr() << " read positions available.\n";
         pos_type rc = std::stringbuf::seekpos(sp, which);
         std::cout << "seekpos() returns " << rc << ".\nAfter the call, "
                   << "size of the get area is "
                   << egptr() - eback() << " with "
                   << egptr() - gptr() << " read positions available.\n";
         return rc;
     }
 };
 int main()
 {
     mybuf buf("12345");
     std::iostream stream(&buf);
     stream.seekg(2);
 }

Output:
 Before seekpos(2), size of the get area is 5 with 5 read positions available.
 seekpos() returns 2.
 After the call, size of the get area is 5 with 3 read positions available.
   Defect reports
   The following behavior-changing defect reports were applied retroactively to
   previously published C++ standards.
     DR Applied to Behavior as published Correct behavior
                      static constant members of std::ios_base
   LWG 375 C++98 were corrected
                      misspecified as members of
                      std::basic_ios
   LWG 564 C++98 if was unclear how to reposition gptr they are repositioned by
                      and/or pptr seekoff()

See also
   pubseekpos invokes seekpos()
              (public member function of std::basic_streambuf<CharT,Traits>)
   seekoff repositions the next pointer in the input sequence, output sequence, or
   [virtual] both, using relative addressing
              (virtual protected member function)
   seekpos repositions the file position, using absolute addressing
   [virtual] (virtual protected member function of std::basic_filebuf<CharT,Traits>)
   seekpos repositions the next pointer in the input sequence, output sequence, or
   [virtual] both using absolute addressing
              (virtual protected member function of std::strstreambuf)