| // Copyright 2017 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "components/zucchini/io_utils.h" |
| |
| #include <iostream> |
| |
| namespace zucchini { |
| |
| /******** LimitedOutputStream::StreamBuf ********/ |
| |
| LimitedOutputStream::StreamBuf::StreamBuf(std::ostream& os, int limit) |
| : os_(os), limit_(limit) {} |
| |
| LimitedOutputStream::StreamBuf::~StreamBuf() { |
| // Display warning in case we forget to flush data with std::endl. |
| if (!str().empty()) { |
| std::cerr << "Warning: LimitedOutputStream has " << str().length() |
| << " bytes of unflushed output." << std::endl; |
| } |
| } |
| |
| int LimitedOutputStream::StreamBuf::sync() { |
| if (full()) { |
| str(""); |
| return 0; |
| } |
| os_ << str(); |
| str(""); |
| if (++counter_ >= limit_) |
| os_ << "(Additional output suppressed)\n"; |
| os_.flush(); |
| return 0; |
| } |
| |
| /******** LimitedOutputStream ********/ |
| |
| LimitedOutputStream::LimitedOutputStream(std::ostream& os, int limit) |
| : std::ostream(&buf_), buf_(os, limit) {} |
| |
| /******** PrefixSep ********/ |
| |
| std::ostream& operator<<(std::ostream& ostr, PrefixSep& obj) { |
| if (obj.first_) |
| obj.first_ = false; |
| else |
| ostr << obj.sep_str_; |
| return ostr; |
| } |
| |
| } // namespace zucchini |