Blame view

3rdparty/boost_1_81_0/boost/io/ostream_put.hpp 1.46 KB
63e88f80   Hu Chunming   提交三方库
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
  /*
  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