xref: /llvm-project/libcxx/include/__ostream/put_character_sequence.h (revision 764834d63d5b1bf5852ae90acdedf66056c54c87)
1*764834d6SNikolas Klauser //===---------------------------------------------------------------------===//
2*764834d6SNikolas Klauser //
3*764834d6SNikolas Klauser // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*764834d6SNikolas Klauser // See https://llvm.org/LICENSE.txt for license information.
5*764834d6SNikolas Klauser // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*764834d6SNikolas Klauser //
7*764834d6SNikolas Klauser //===---------------------------------------------------------------------===//
8*764834d6SNikolas Klauser 
9*764834d6SNikolas Klauser #ifndef _LIBCPP___OSTREAM_PUT_CHARACTER_SEQUENCE_H
10*764834d6SNikolas Klauser #define _LIBCPP___OSTREAM_PUT_CHARACTER_SEQUENCE_H
11*764834d6SNikolas Klauser 
12*764834d6SNikolas Klauser #include <__config>
13*764834d6SNikolas Klauser 
14*764834d6SNikolas Klauser #if _LIBCPP_HAS_LOCALIZATION
15*764834d6SNikolas Klauser 
16*764834d6SNikolas Klauser #  include <__cstddef/size_t.h>
17*764834d6SNikolas Klauser #  include <__fwd/ostream.h>
18*764834d6SNikolas Klauser #  include <__iterator/ostreambuf_iterator.h>
19*764834d6SNikolas Klauser #  include <__locale_dir/pad_and_output.h>
20*764834d6SNikolas Klauser #  include <ios>
21*764834d6SNikolas Klauser 
22*764834d6SNikolas Klauser #  if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
23*764834d6SNikolas Klauser #    pragma GCC system_header
24*764834d6SNikolas Klauser #  endif
25*764834d6SNikolas Klauser 
26*764834d6SNikolas Klauser _LIBCPP_BEGIN_NAMESPACE_STD
27*764834d6SNikolas Klauser 
28*764834d6SNikolas Klauser template <class _CharT, class _Traits>
29*764834d6SNikolas Klauser _LIBCPP_HIDE_FROM_ABI basic_ostream<_CharT, _Traits>&
30*764834d6SNikolas Klauser __put_character_sequence(basic_ostream<_CharT, _Traits>& __os, const _CharT* __str, size_t __len) {
31*764834d6SNikolas Klauser #  if _LIBCPP_HAS_EXCEPTIONS
32*764834d6SNikolas Klauser   try {
33*764834d6SNikolas Klauser #  endif // _LIBCPP_HAS_EXCEPTIONS
34*764834d6SNikolas Klauser     typename basic_ostream<_CharT, _Traits>::sentry __s(__os);
35*764834d6SNikolas Klauser     if (__s) {
36*764834d6SNikolas Klauser       typedef ostreambuf_iterator<_CharT, _Traits> _Ip;
37*764834d6SNikolas Klauser       if (std::__pad_and_output(
38*764834d6SNikolas Klauser               _Ip(__os),
39*764834d6SNikolas Klauser               __str,
40*764834d6SNikolas Klauser               (__os.flags() & ios_base::adjustfield) == ios_base::left ? __str + __len : __str,
41*764834d6SNikolas Klauser               __str + __len,
42*764834d6SNikolas Klauser               __os,
43*764834d6SNikolas Klauser               __os.fill())
44*764834d6SNikolas Klauser               .failed())
45*764834d6SNikolas Klauser         __os.setstate(ios_base::badbit | ios_base::failbit);
46*764834d6SNikolas Klauser     }
47*764834d6SNikolas Klauser #  if _LIBCPP_HAS_EXCEPTIONS
48*764834d6SNikolas Klauser   } catch (...) {
49*764834d6SNikolas Klauser     __os.__set_badbit_and_consider_rethrow();
50*764834d6SNikolas Klauser   }
51*764834d6SNikolas Klauser #  endif // _LIBCPP_HAS_EXCEPTIONS
52*764834d6SNikolas Klauser   return __os;
53*764834d6SNikolas Klauser }
54*764834d6SNikolas Klauser 
55*764834d6SNikolas Klauser _LIBCPP_END_NAMESPACE_STD
56*764834d6SNikolas Klauser 
57*764834d6SNikolas Klauser #endif // _LIBCPP_HAS_LOCALIZATION
58*764834d6SNikolas Klauser 
59*764834d6SNikolas Klauser #endif // _LIBCPP___OSTREAM_PUT_CHARACTER_SEQUENCE_H
60