blob: aa493d03c8af9dead60f68c61d8d5c14f91093b0 [file] [log] [blame]
// 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