#include <stdplus/fd/fmt.hpp>
#include <stdplus/fd/ops.hpp>

namespace stdplus
{
namespace fd
{

FormatBuffer::FormatBuffer(Fd& fd, size_t max) : fd(fd), max(max)
{
}

FormatBuffer::~FormatBuffer() noexcept(false)
{
    flush();
}

void FormatBuffer::flush()
{
    if (buf.size() > 0)
    {
        writeExact(fd, buf);
        buf.clear();
    }
}

void FormatBuffer::writeIfNeeded()
{
    if (buf.size() >= max)
    {
        flush();
    }
}

} // namespace fd
} // namespace stdplus
