Program Listing for File OutputBuffer.cpp¶
↰ Return to documentation for file (umpire/util/OutputBuffer.cpp
)
//////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2016-20, Lawrence Livermore National Security, LLC and Umpire
// project contributors. See the COPYRIGHT file for details.
//
// SPDX-License-Identifier: (MIT)
//////////////////////////////////////////////////////////////////////////////
#include "umpire/util/OutputBuffer.hpp"
#include <ostream>
namespace umpire {
namespace util {
void
OutputBuffer::setConsoleStream(std::ostream* stream)
{
if (stream) {
d_console_stream = stream->rdbuf();
} else {
d_console_stream = nullptr;
}
}
void
OutputBuffer::setFileStream(std::ostream* stream)
{
if (stream) {
d_file_stream = stream->rdbuf();
} else {
d_file_stream = nullptr;
}
}
int
OutputBuffer::overflow(int ch)
{
if (ch == EOF)
{
return !EOF;
} else {
int r_console{ch};
int r_file{ch};
if (d_console_stream) {
r_console = d_console_stream->sputc(static_cast<char>(ch));
}
if (d_file_stream) {
r_file = d_file_stream->sputc(static_cast<char>(ch));
}
return r_console == EOF || r_file == EOF ? EOF : ch;
}
}
int
OutputBuffer::sync()
{
auto ret = 0;
if (d_console_stream) {
ret = d_console_stream->pubsync();
}
if (d_file_stream) {
ret += d_file_stream->pubsync();
}
return ret == 0 ? 0 : -1;
}
OutputBuffer::~OutputBuffer()
{
if (d_console_stream) {
d_console_stream->pubsync();
}
if (d_file_stream) {
d_file_stream->pubsync();
}
}
} // end of namespace util
} // end of namespace umpire