1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- /*
- Copyright 2019 Glen Joseph Fernandes
- ([email protected])
- 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
|