std::basic_streambuf<CharT,Traits>::setp - cppreference.com (original) (raw)

| protected: void setp( char_type* pbeg, char_type* pend ); | | | | ------------------------------------------------------------- | | |

Sets the values of the pointers defining the put area.

After the call, pbase() == pbeg, pptr() == pbeg and epptr() == pend are all true.

If any of [pbeg, pend) is not a valid range, the behavior is undefined.

[edit] Parameters

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

[edit] Example

#include #include #include   // Buffer for std::ostream implemented by std::array template<std::size_t size, class CharT = char> struct ArrayedStreamBuffer : std::basic_streambuf { using Base = std::basic_streambuf; using char_type = typename Base::char_type;   ArrayedStreamBuffer() { // put area pointers to work with “buffer” Base::setp(buffer.data(), buffer.data() + size); }   void print_buffer() { for (char_type i : buffer) { if (i == 0) std::cout << "\0"; else std::cout << i; std::cout << ' '; } std::cout << '\n'; }   private: std::array<char_type, size> buffer{}; // value-initialize “buffer” };   int main() { ArrayedStreamBuffer<10> streambuf; std::ostream stream(&streambuf);   stream << "hello"; stream << ",";   streambuf.print_buffer(); }

Output:

[edit] Defect reports

The following behavior-changing defect reports were applied retroactively to previously published C++ standards.

DR Applied to Behavior as published Correct behavior
LWG 4023 C++98 setp did not require the output sequence to be a valid range requires

[edit] See also

| | repositions the beginning, next, and end pointers of the input sequence (protected member function) [edit] | | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |