//
// aegis - project change supervisor
// Copyright (C) 1999, 2001-2006, 2008 Peter Miller
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see
// .
//
#include
#include
#include
#include
#include
#include
#include
output_memory::~output_memory()
{
trace(("output_memory_destructor(this = %08lX)\n{\n", (long)this));
trace(("}\n"));
}
output_memory::output_memory()
{
trace(("output_memory()\n"));
}
output_memory::mpointer
output_memory::create()
{
return mpointer(new output_memory());
}
nstring
output_memory::filename()
const
{
return "memory";
}
long
output_memory::ftell_inner()
const
{
return buffer.size();
}
void
output_memory::write_inner(const void *data, size_t len)
{
trace(("output_memory_write(this = %08lX, data = %08lX, len = %ld)\n{\n",
(long)this, (long)data, (long)len));
buffer.push_back((const char *)data, len);
trace(("}\n"));
}
void
output_memory::end_of_line_inner()
{
trace(("output_memory_eol(this = %08lX)\n{\n", (long)this));
if (!buffer.empty() && buffer[buffer.size() - 1] != '\n')
fputc('\n');
trace(("}\n"));
}
const char *
output_memory::type_name()
const
{
return "memory";
}
void
output_memory::forward(output::pointer deeper)
{
trace(("output_memory_forward(this = %08lX, deeper = %08lX)\n{\n",
(long)this, (long)deeper.get()));
flush();
if (!buffer.empty())
deeper->write(buffer.get_data(), buffer.size());
#ifdef DEBUG
else
error_raw("%s: %d: nothing to forward", __FILE__, __LINE__);
#endif
trace(("}\n"));
}
nstring
output_memory::mkstr()
{
flush();
return buffer.mkstr();
}