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