std::basic_streambuf<CharT,Traits>::setp (3) - Linux Manuals

std::basic_streambuf<CharT,Traits>::setp: std::basic_streambuf<CharT,Traits>::setp

NAME

std::basic_streambuf<CharT,Traits>::setp - std::basic_streambuf<CharT,Traits>::setp

Synopsis


void setp( char_type* pbeg, char_type* pend );


Sets the values of the pointers defining the put area. Specifically, after the call pbase() == pbeg, pptr() == pbeg, epptr() == pend

Parameters


pbeg - pointer to the new beginning of the put area
pend - pointer to the new end of the put area

Return value


(none)

Example


// Run this code


  #include <iostream>
  #include <array>


  // Buffer for std::ostream implemented by std::array
  template<std::size_t SIZE, class CharT = char>
  class ArrayedStreamBuffer : public std::basic_streambuf<CharT>
  {
  public:
      using Base = std::basic_streambuf<CharT>;
      using char_type = typename Base::char_type;


      ArrayedStreamBuffer() : buffer_{} // value-initialize buffer_ to all zeroes
      {
          Base::setp(buffer_.begin(), buffer_.end()); // set std::basic_streambuf
              // put area pointers to work with 'buffer_'
      }


      void print_buffer()
      {
          for (const auto& i: buffer_) {
              if (i == 0) {
                  std::cout << "NULL";
              } else {
                  std::cout << i;
              }
              std::cout << " ";
          }
          std::cout << "\n";
      }


  private:
      std::array<char_type, SIZE> buffer_;
  };


  int main()
  {
      ArrayedStreamBuffer<10> streambuf;
      std::ostream stream(&streambuf);


      stream << "hello";
      stream << ",";


      streambuf.print_buffer();
  }

Output:


  h e l l o , NULL NULL NULL NULL

See also


     repositions the beginning, next, and end pointers of the input sequence
setg (protected member function)