// 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 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