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
28template <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