/* Copyright 2019 Glen Joseph Fernandes (glenjofe@gmail.com) Distributed under the Boost Software License, Version 1.0. (http://www.boost.org/LICENSE_1_0.txt) */ #ifndef BOOST_IO_OSTREAM_PUT_HPP #define BOOST_IO_OSTREAM_PUT_HPP #include #include namespace boost { namespace io { template inline std::basic_ostream& ostream_put(std::basic_ostream& os, const charT* data, std::size_t size) { typedef std::basic_ostream stream; detail::ostream_guard guard(os); typename stream::sentry entry(os); if (entry) { std::basic_streambuf& buf = *os.rdbuf(); std::size_t width = static_cast(os.width()); if (width <= size) { if (static_cast(buf.sputn(data, size)) != size) { return os; } } else if ((os.flags() & stream::adjustfield) == stream::left) { if (static_cast(buf.sputn(data, size)) != size || !detail::buffer_fill(buf, os.fill(), width - size)) { return os; } } else if (!detail::buffer_fill(buf, os.fill(), width - size) || static_cast(buf.sputn(data, size)) != size) { return os; } os.width(0); } guard.release(); return os; } } /* io */ } /* boost */ #endif