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