| /* |
| 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 <boost/io/detail/buffer_fill.hpp> |
| #include <boost/io/detail/ostream_guard.hpp> |
| |
| namespace boost { |
| namespace io { |
| |
| template<class charT, class traits> |
| inline std::basic_ostream<charT, traits>& |
| ostream_put(std::basic_ostream<charT, traits>& os, const charT* data, |
| std::size_t size) |
| { |
| typedef std::basic_ostream<charT, traits> stream; |
| detail::ostream_guard<charT, traits> guard(os); |
| typename stream::sentry entry(os); |
| if (entry) { |
| std::basic_streambuf<charT, traits>& buf = *os.rdbuf(); |
| std::size_t width = static_cast<std::size_t>(os.width()); |
| if (width <= size) { |
| if (static_cast<std::size_t>(buf.sputn(data, size)) != size) { |
| return os; |
| } |
| } else if ((os.flags() & stream::adjustfield) == stream::left) { |
| if (static_cast<std::size_t>(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<std::size_t>(buf.sputn(data, size)) != size) { |
| return os; |
| } |
| os.width(0); |
| } |
| guard.release(); |
| return os; |
| } |
| |
| } /* io */ |
| } /* boost */ |
| |
| #endif |