17 : original_buffer(sbuf), max_width(max_width), current_width(0) {}
20 virtual int overflow(
int ch)
override {
21 if (ch ==
'\n' || ch == EOF) {
23 return original_buffer->sputc(ch);
25 if (current_width >= max_width) {
26 if (original_buffer->sputc(
'\n') == EOF) {
32 return original_buffer->sputc(ch);
36 virtual std::streamsize xsputn(
const char* s, std::streamsize n)
override {
37 std::streamsize written = 0;
39 if (current_width >= max_width) {
40 if (original_buffer->sputc(
'\n') == EOF) {
45 std::streamsize remaining = n - written;
46 std::streamsize space_left = max_width - current_width;
47 std::streamsize to_write = std::min(remaining, space_left);
48 std::streamsize just_written = original_buffer->sputn(s + written, to_write);
49 if (just_written == 0) {
52 written += just_written;
53 current_width += just_written;
59 std::streambuf* original_buffer;
60 std::size_t max_width;
61 std::size_t current_width;