__locale revision e9df0a5c6c864f1ea86486881a3ee559c56105e7
1bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// -*- C++ -*- 2bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//===----------------------------------------------------------------------===// 3bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// 4f5256e16dfc425c1d466f6308d4026d529ce9e0bHoward Hinnant// The LLVM Compiler Infrastructure 5bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// 6b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// This file is dual licensed under the MIT and the University of Illinois Open 7b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// Source Licenses. See LICENSE.TXT for details. 8bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// 9bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant//===----------------------------------------------------------------------===// 10bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 11bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#ifndef _LIBCPP___LOCALE 12bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#define _LIBCPP___LOCALE 13bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 14bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <__config> 15bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <string> 16bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <memory> 17bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <utility> 18bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <mutex> 19bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <cstdint> 20bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#include <cctype> 21adff4895b2746f30b271bc219713e7ded5ae9677Howard Hinnant#include <locale.h> 22e9df0a5c6c864f1ea86486881a3ee559c56105e7Howard Hinnant#ifdef _LIBCPP_MSVCRT 2314fa9f9d8ff5a4541404f3e23b91188e74c56f31Howard Hinnant# include <support/win32/locale_win32.h> 24fc2f021bdd3fd69ff62bfc6ceb5c5264afd4ee7dHoward Hinnant#elif (defined(__GLIBC__) || defined(__APPLE__) || defined(__FreeBSD__) || defined(__sun__)) || defined(EMSCRIPTEN) 2592a07003b2ce449b22709fbd9b4f1e49b3a2fd3eHoward Hinnant# include <xlocale.h> 26fc2f021bdd3fd69ff62bfc6ceb5c5264afd4ee7dHoward Hinnant#endif // _WIN32 || __GLIBC__ || __APPLE__ || __FreeBSD__ || __sun__ || EMSCRIPTEN 27bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 2808e17472e4d5434b668dd4c63e3fa5f4b45337b9Howard Hinnant#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 29bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#pragma GCC system_header 3008e17472e4d5434b668dd4c63e3fa5f4b45337b9Howard Hinnant#endif 31bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 32bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant_LIBCPP_BEGIN_NAMESPACE_STD 33bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 3483eade6abb414e0e814977921bcb6e46853cae03Howard Hinnantclass _LIBCPP_TYPE_VIS locale; 35bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 3633be35effe82ca5a7a2b285fb9d8176dd94e5e8cHoward Hinnanttemplate <class _Facet> 3733be35effe82ca5a7a2b285fb9d8176dd94e5e8cHoward Hinnant_LIBCPP_INLINE_VISIBILITY 3833be35effe82ca5a7a2b285fb9d8176dd94e5e8cHoward Hinnantbool 3933be35effe82ca5a7a2b285fb9d8176dd94e5e8cHoward Hinnanthas_facet(const locale&) _NOEXCEPT; 4033be35effe82ca5a7a2b285fb9d8176dd94e5e8cHoward Hinnant 4133be35effe82ca5a7a2b285fb9d8176dd94e5e8cHoward Hinnanttemplate <class _Facet> 4233be35effe82ca5a7a2b285fb9d8176dd94e5e8cHoward Hinnant_LIBCPP_INLINE_VISIBILITY 4333be35effe82ca5a7a2b285fb9d8176dd94e5e8cHoward Hinnantconst _Facet& 4433be35effe82ca5a7a2b285fb9d8176dd94e5e8cHoward Hinnantuse_facet(const locale&); 45bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 4683eade6abb414e0e814977921bcb6e46853cae03Howard Hinnantclass _LIBCPP_TYPE_VIS locale 47bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 48bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantpublic: 49bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant // types: 5083eade6abb414e0e814977921bcb6e46853cae03Howard Hinnant class _LIBCPP_TYPE_VIS facet; 5183eade6abb414e0e814977921bcb6e46853cae03Howard Hinnant class _LIBCPP_TYPE_VIS id; 52bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 53bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef int category; 54bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static const category // values assigned here are for exposition only 55bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant none = 0, 56bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant collate = LC_COLLATE_MASK, 57bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ctype = LC_CTYPE_MASK, 58bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant monetary = LC_MONETARY_MASK, 59bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant numeric = LC_NUMERIC_MASK, 60bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant time = LC_TIME_MASK, 61bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant messages = LC_MESSAGES_MASK, 62bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant all = collate | ctype | monetary | numeric | time | messages; 63bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 64bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant // construct/copy/destroy: 65c983454d300a3a1f11055c9dbfedf383a58f56ceHoward Hinnant locale() _NOEXCEPT; 66c983454d300a3a1f11055c9dbfedf383a58f56ceHoward Hinnant locale(const locale&) _NOEXCEPT; 67bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant explicit locale(const char*); 68bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant explicit locale(const string&); 69bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant locale(const locale&, const char*, category); 70bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant locale(const locale&, const string&, category); 712d72b1e393e35d61917d6d0ce069482ab11e96d1Howard Hinnant template <class _Facet> 722d72b1e393e35d61917d6d0ce069482ab11e96d1Howard Hinnant _LIBCPP_INLINE_VISIBILITY locale(const locale&, _Facet*); 73bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant locale(const locale&, const locale&, category); 74bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 75c983454d300a3a1f11055c9dbfedf383a58f56ceHoward Hinnant ~locale(); 76bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 77c983454d300a3a1f11055c9dbfedf383a58f56ceHoward Hinnant const locale& operator=(const locale&) _NOEXCEPT; 78bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 79bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant template <class _Facet> locale combine(const locale&) const; 80bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 81bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant // locale operations: 82bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant string name() const; 83bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant bool operator==(const locale&) const; 84bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant bool operator!=(const locale& __y) const {return !(*this == __y);} 85bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant template <class _CharT, class _Traits, class _Allocator> 86bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant bool operator()(const basic_string<_CharT, _Traits, _Allocator>&, 87bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const basic_string<_CharT, _Traits, _Allocator>&) const; 88bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 89bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant // global locale objects: 90bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static locale global(const locale&); 91bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static const locale& classic(); 92bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 93bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantprivate: 94bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant class __imp; 95bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __imp* __locale_; 96bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 97bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant void __install_ctor(const locale&, facet*, long); 98bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static locale& __global(); 99bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant bool has_facet(id&) const; 100bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const facet* use_facet(id&) const; 101bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 102c983454d300a3a1f11055c9dbfedf383a58f56ceHoward Hinnant template <class _Facet> friend bool has_facet(const locale&) _NOEXCEPT; 103bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant template <class _Facet> friend const _Facet& use_facet(const locale&); 104bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}; 105bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 10683eade6abb414e0e814977921bcb6e46853cae03Howard Hinnantclass _LIBCPP_TYPE_VIS locale::facet 107bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant : public __shared_count 108bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 109bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantprotected: 110b0be42b2ce0dbde30fb64a96586411f35d2b1aedHoward Hinnant _LIBCPP_INLINE_VISIBILITY 111bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant explicit facet(size_t __refs = 0) 112bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant : __shared_count(static_cast<long>(__refs)-1) {} 113bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 114bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual ~facet(); 115bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 116bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// facet(const facet&) = delete; // effectively done in __shared_count 117bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// void operator=(const facet&) = delete; 118bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantprivate: 1191694d23e23d41c4037111d96324c0c16c744c09dHoward Hinnant virtual void __on_zero_shared() _NOEXCEPT; 120bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}; 121bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 12283eade6abb414e0e814977921bcb6e46853cae03Howard Hinnantclass _LIBCPP_TYPE_VIS locale::id 123bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 124bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant once_flag __flag_; 125bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant int32_t __id_; 126324bb03bb94f67ae7f9092810e4e4f6bd8bf506eHoward Hinnant 127bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static int32_t __next_id; 128bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantpublic: 129f3d62ea57ff9ac61c5fd9860713d2d0f781f9e12Howard Hinnant _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR id() :__id_(0) {} 130bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantprivate: 131bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant void __init(); 132bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant void operator=(const id&); // = delete; 133bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant id(const id&); // = delete; 134bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantpublic: // only needed for tests 135bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long __get(); 136bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 137bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant friend class locale; 138bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant friend class locale::__imp; 139bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}; 140bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 141bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <class _Facet> 142bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantinline _LIBCPP_INLINE_VISIBILITY 143bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantlocale::locale(const locale& __other, _Facet* __f) 144bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 145bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __install_ctor(__other, __f, __f ? __f->id.__get() : 0); 146bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 147bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 148bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <class _Facet> 149bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantlocale 150bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantlocale::combine(const locale& __other) const 151bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 152d444470d6cd1cad554139c4ba7f3c4f3fe921a5dHoward Hinnant#ifndef _LIBCPP_NO_EXCEPTIONS 1530949eedbd621bc1611266fb180d9a356ee1eaf9fHoward Hinnant if (!_VSTD::has_facet<_Facet>(__other)) 154bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant throw runtime_error("locale::combine: locale missing facet"); 155324bb03bb94f67ae7f9092810e4e4f6bd8bf506eHoward Hinnant#endif // _LIBCPP_NO_EXCEPTIONS 1560949eedbd621bc1611266fb180d9a356ee1eaf9fHoward Hinnant return locale(*this, &const_cast<_Facet&>(_VSTD::use_facet<_Facet>(__other))); 157bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 158bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 159bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <class _Facet> 160bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantinline _LIBCPP_INLINE_VISIBILITY 161bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantbool 162c983454d300a3a1f11055c9dbfedf383a58f56ceHoward Hinnanthas_facet(const locale& __l) _NOEXCEPT 163bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 164bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return __l.has_facet(_Facet::id); 165bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 166bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 167bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <class _Facet> 168bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantinline _LIBCPP_INLINE_VISIBILITY 169bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantconst _Facet& 170bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantuse_facet(const locale& __l) 171bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 172bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return static_cast<const _Facet&>(*__l.use_facet(_Facet::id)); 173bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 174bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 175bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// template <class _CharT> class collate; 176bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 177bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <class _CharT> 17883eade6abb414e0e814977921bcb6e46853cae03Howard Hinnantclass _LIBCPP_TYPE_VIS collate 179bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant : public locale::facet 180bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 181bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantpublic: 182bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef _CharT char_type; 183bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef basic_string<char_type> string_type; 184bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 185b0be42b2ce0dbde30fb64a96586411f35d2b1aedHoward Hinnant _LIBCPP_INLINE_VISIBILITY 186bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant explicit collate(size_t __refs = 0) 187bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant : locale::facet(__refs) {} 188bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 189b0be42b2ce0dbde30fb64a96586411f35d2b1aedHoward Hinnant _LIBCPP_INLINE_VISIBILITY 190bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant int compare(const char_type* __lo1, const char_type* __hi1, 191bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const char_type* __lo2, const char_type* __hi2) const 192bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 193bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_compare(__lo1, __hi1, __lo2, __hi2); 194bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 195bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 196b0be42b2ce0dbde30fb64a96586411f35d2b1aedHoward Hinnant _LIBCPP_INLINE_VISIBILITY 197bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant string_type transform(const char_type* __lo, const char_type* __hi) const 198bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 199bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_transform(__lo, __hi); 200bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 201bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 202b0be42b2ce0dbde30fb64a96586411f35d2b1aedHoward Hinnant _LIBCPP_INLINE_VISIBILITY 203bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long hash(const char_type* __lo, const char_type* __hi) const 204bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 205bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_hash(__lo, __hi); 206bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 207bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 208bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static locale::id id; 209bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 210bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantprotected: 211bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ~collate(); 212bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual int do_compare(const char_type* __lo1, const char_type* __hi1, 213bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const char_type* __lo2, const char_type* __hi2) const; 214bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual string_type do_transform(const char_type* __lo, const char_type* __hi) const 215bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant {return string_type(__lo, __hi);} 216bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual long do_hash(const char_type* __lo, const char_type* __hi) const; 217bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}; 218bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 219bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <class _CharT> locale::id collate<_CharT>::id; 220bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 221bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <class _CharT> 222bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantcollate<_CharT>::~collate() 223bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 224bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 225bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 226bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <class _CharT> 227bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantint 228bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantcollate<_CharT>::do_compare(const char_type* __lo1, const char_type* __hi1, 229bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const char_type* __lo2, const char_type* __hi2) const 230bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 231bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant for (; __lo2 != __hi2; ++__lo1, ++__lo2) 232bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 233bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant if (__lo1 == __hi1 || *__lo1 < *__lo2) 234bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return -1; 235bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant if (*__lo2 < *__lo1) 236bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return 1; 237bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 238bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return __lo1 != __hi1; 239bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 240bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 241bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <class _CharT> 242bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantlong 24311624459ef27e06ef2d8e71ec2d35bdd334dbbd9Howard Hinnantcollate<_CharT>::do_hash(const char_type* __lo, const char_type* __hi) const 244bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 24511624459ef27e06ef2d8e71ec2d35bdd334dbbd9Howard Hinnant size_t __h = 0; 24611624459ef27e06ef2d8e71ec2d35bdd334dbbd9Howard Hinnant const size_t __sr = __CHAR_BIT__ * sizeof(size_t) - 8; 24711624459ef27e06ef2d8e71ec2d35bdd334dbbd9Howard Hinnant const size_t __mask = size_t(0xF) << (__sr + 4); 24811624459ef27e06ef2d8e71ec2d35bdd334dbbd9Howard Hinnant for(const char_type* __p = __lo; __p != __hi; ++__p) 249bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 250ec3773c2dadbeadfc5def927116c2ee9d9c53066Howard Hinnant __h = (__h << 4) + static_cast<size_t>(*__p); 25111624459ef27e06ef2d8e71ec2d35bdd334dbbd9Howard Hinnant size_t __g = __h & __mask; 25211624459ef27e06ef2d8e71ec2d35bdd334dbbd9Howard Hinnant __h ^= __g | (__g >> __sr); 253bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 25411624459ef27e06ef2d8e71ec2d35bdd334dbbd9Howard Hinnant return static_cast<long>(__h); 255bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 256bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 25783eade6abb414e0e814977921bcb6e46853cae03Howard Hinnant_LIBCPP_EXTERN_TEMPLATE(class _LIBCPP_TYPE_VIS collate<char>) 25883eade6abb414e0e814977921bcb6e46853cae03Howard Hinnant_LIBCPP_EXTERN_TEMPLATE(class _LIBCPP_TYPE_VIS collate<wchar_t>) 259bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 260bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// template <class CharT> class collate_byname; 261bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 26283eade6abb414e0e814977921bcb6e46853cae03Howard Hinnanttemplate <class _CharT> class _LIBCPP_TYPE_VIS collate_byname; 263bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 264bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <> 26583eade6abb414e0e814977921bcb6e46853cae03Howard Hinnantclass _LIBCPP_TYPE_VIS collate_byname<char> 266bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant : public collate<char> 267bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 268bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant locale_t __l; 269bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantpublic: 270bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef char char_type; 271bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef basic_string<char_type> string_type; 272bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 273bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant explicit collate_byname(const char* __n, size_t __refs = 0); 274bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant explicit collate_byname(const string& __n, size_t __refs = 0); 275bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 276bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantprotected: 277bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ~collate_byname(); 278bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual int do_compare(const char_type* __lo1, const char_type* __hi1, 279bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const char_type* __lo2, const char_type* __hi2) const; 280bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual string_type do_transform(const char_type* __lo, const char_type* __hi) const; 281bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}; 282bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 283bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <> 28483eade6abb414e0e814977921bcb6e46853cae03Howard Hinnantclass _LIBCPP_TYPE_VIS collate_byname<wchar_t> 285bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant : public collate<wchar_t> 286bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 287bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant locale_t __l; 288bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantpublic: 289bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef wchar_t char_type; 290bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef basic_string<char_type> string_type; 291bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 292bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant explicit collate_byname(const char* __n, size_t __refs = 0); 293bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant explicit collate_byname(const string& __n, size_t __refs = 0); 294bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 295bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantprotected: 296bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ~collate_byname(); 297bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 298bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual int do_compare(const char_type* __lo1, const char_type* __hi1, 299bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const char_type* __lo2, const char_type* __hi2) const; 300bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual string_type do_transform(const char_type* __lo, const char_type* __hi) const; 301bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}; 302bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 303bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <class _CharT, class _Traits, class _Allocator> 304bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantbool 305bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantlocale::operator()(const basic_string<_CharT, _Traits, _Allocator>& __x, 306bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const basic_string<_CharT, _Traits, _Allocator>& __y) const 307bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 3080949eedbd621bc1611266fb180d9a356ee1eaf9fHoward Hinnant return _VSTD::use_facet<_VSTD::collate<_CharT> >(*this).compare( 309bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __x.data(), __x.data() + __x.size(), 310bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __y.data(), __y.data() + __y.size()) < 0; 311bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 312bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 313bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// template <class charT> class ctype 314bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 31583eade6abb414e0e814977921bcb6e46853cae03Howard Hinnantclass _LIBCPP_TYPE_VIS ctype_base 316b0be42b2ce0dbde30fb64a96586411f35d2b1aedHoward Hinnant{ 317bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantpublic: 31853e27639669f8f05c77ea4ef60063667d31dd674Marshall Clow#ifdef __GLIBC__ 31962a6ac33a217b0e5a4c42367c6b72e51497246aeSean Hunt typedef unsigned short mask; 320c512df1950baf9466843b2943855356c031fec08David Chisnall static const mask space = _ISspace; 321c512df1950baf9466843b2943855356c031fec08David Chisnall static const mask print = _ISprint; 322c512df1950baf9466843b2943855356c031fec08David Chisnall static const mask cntrl = _IScntrl; 323c512df1950baf9466843b2943855356c031fec08David Chisnall static const mask upper = _ISupper; 324c512df1950baf9466843b2943855356c031fec08David Chisnall static const mask lower = _ISlower; 325c512df1950baf9466843b2943855356c031fec08David Chisnall static const mask alpha = _ISalpha; 326c512df1950baf9466843b2943855356c031fec08David Chisnall static const mask digit = _ISdigit; 327c512df1950baf9466843b2943855356c031fec08David Chisnall static const mask punct = _ISpunct; 328c512df1950baf9466843b2943855356c031fec08David Chisnall static const mask xdigit = _ISxdigit; 329c512df1950baf9466843b2943855356c031fec08David Chisnall static const mask blank = _ISblank; 330a22d2addb1287a7642bfcb211ae2cb21890d1cbdMarshall Clow#elif defined(_WIN32) 3313c466fc631a2a474d84ad6c29770a2cbdf40bf1bHoward Hinnant typedef unsigned short mask; 33292a07003b2ce449b22709fbd9b4f1e49b3a2fd3eHoward Hinnant static const mask space = _SPACE; 33392a07003b2ce449b22709fbd9b4f1e49b3a2fd3eHoward Hinnant static const mask print = _BLANK|_PUNCT|_ALPHA|_DIGIT; 33492a07003b2ce449b22709fbd9b4f1e49b3a2fd3eHoward Hinnant static const mask cntrl = _CONTROL; 33592a07003b2ce449b22709fbd9b4f1e49b3a2fd3eHoward Hinnant static const mask upper = _UPPER; 33692a07003b2ce449b22709fbd9b4f1e49b3a2fd3eHoward Hinnant static const mask lower = _LOWER; 33792a07003b2ce449b22709fbd9b4f1e49b3a2fd3eHoward Hinnant static const mask alpha = _ALPHA; 33892a07003b2ce449b22709fbd9b4f1e49b3a2fd3eHoward Hinnant static const mask digit = _DIGIT; 33992a07003b2ce449b22709fbd9b4f1e49b3a2fd3eHoward Hinnant static const mask punct = _PUNCT; 34092a07003b2ce449b22709fbd9b4f1e49b3a2fd3eHoward Hinnant static const mask xdigit = _HEX; 34192a07003b2ce449b22709fbd9b4f1e49b3a2fd3eHoward Hinnant static const mask blank = _BLANK; 342a71a9526340325a63cfee83be43be30af25a802cJoerg Sonnenberger#elif defined(__APPLE__) || defined(__FreeBSD__) || defined(EMSCRIPTEN) || defined(__NetBSD__) 34353e27639669f8f05c77ea4ef60063667d31dd674Marshall Clow#ifdef __APPLE__ 344bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef __uint32_t mask; 34553e27639669f8f05c77ea4ef60063667d31dd674Marshall Clow#elif defined(__FreeBSD__) 346c512df1950baf9466843b2943855356c031fec08David Chisnall typedef unsigned long mask; 347a71a9526340325a63cfee83be43be30af25a802cJoerg Sonnenberger#elif defined(EMSCRIPTEN) || defined(__NetBSD__) 348fc2f021bdd3fd69ff62bfc6ceb5c5264afd4ee7dHoward Hinnant typedef unsigned short mask; 34962a6ac33a217b0e5a4c42367c6b72e51497246aeSean Hunt#endif 350bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static const mask space = _CTYPE_S; 351bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static const mask print = _CTYPE_R; 352bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static const mask cntrl = _CTYPE_C; 353bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static const mask upper = _CTYPE_U; 354bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static const mask lower = _CTYPE_L; 355bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static const mask alpha = _CTYPE_A; 356bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static const mask digit = _CTYPE_D; 357bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static const mask punct = _CTYPE_P; 358bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static const mask xdigit = _CTYPE_X; 359a71a9526340325a63cfee83be43be30af25a802cJoerg Sonnenberger# if defined(__NetBSD__) 360a71a9526340325a63cfee83be43be30af25a802cJoerg Sonnenberger static const mask blank = _CTYPE_BL; 361a71a9526340325a63cfee83be43be30af25a802cJoerg Sonnenberger# else 362bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static const mask blank = _CTYPE_B; 363a71a9526340325a63cfee83be43be30af25a802cJoerg Sonnenberger# endif 36453e27639669f8f05c77ea4ef60063667d31dd674Marshall Clow#elif defined(__sun__) 365997e4541395abd2db274c3bda04beaf5085e746fDavid Chisnall typedef unsigned int mask; 366997e4541395abd2db274c3bda04beaf5085e746fDavid Chisnall static const mask space = _ISSPACE; 367997e4541395abd2db274c3bda04beaf5085e746fDavid Chisnall static const mask print = _ISPRINT; 368997e4541395abd2db274c3bda04beaf5085e746fDavid Chisnall static const mask cntrl = _ISCNTRL; 369997e4541395abd2db274c3bda04beaf5085e746fDavid Chisnall static const mask upper = _ISUPPER; 370997e4541395abd2db274c3bda04beaf5085e746fDavid Chisnall static const mask lower = _ISLOWER; 371997e4541395abd2db274c3bda04beaf5085e746fDavid Chisnall static const mask alpha = _ISALPHA; 372997e4541395abd2db274c3bda04beaf5085e746fDavid Chisnall static const mask digit = _ISDIGIT; 373997e4541395abd2db274c3bda04beaf5085e746fDavid Chisnall static const mask punct = _ISPUNCT; 374997e4541395abd2db274c3bda04beaf5085e746fDavid Chisnall static const mask xdigit = _ISXDIGIT; 375997e4541395abd2db274c3bda04beaf5085e746fDavid Chisnall static const mask blank = _ISBLANK; 376fc2f021bdd3fd69ff62bfc6ceb5c5264afd4ee7dHoward Hinnant#else // __GLIBC__ || _WIN32 || __APPLE__ || __FreeBSD__ || EMSCRIPTEN || __sun__ 37711624459ef27e06ef2d8e71ec2d35bdd334dbbd9Howard Hinnant typedef unsigned long mask; 37811624459ef27e06ef2d8e71ec2d35bdd334dbbd9Howard Hinnant static const mask space = 1<<0; 37911624459ef27e06ef2d8e71ec2d35bdd334dbbd9Howard Hinnant static const mask print = 1<<1; 38011624459ef27e06ef2d8e71ec2d35bdd334dbbd9Howard Hinnant static const mask cntrl = 1<<2; 38111624459ef27e06ef2d8e71ec2d35bdd334dbbd9Howard Hinnant static const mask upper = 1<<3; 38211624459ef27e06ef2d8e71ec2d35bdd334dbbd9Howard Hinnant static const mask lower = 1<<4; 38311624459ef27e06ef2d8e71ec2d35bdd334dbbd9Howard Hinnant static const mask alpha = 1<<5; 38411624459ef27e06ef2d8e71ec2d35bdd334dbbd9Howard Hinnant static const mask digit = 1<<6; 38511624459ef27e06ef2d8e71ec2d35bdd334dbbd9Howard Hinnant static const mask punct = 1<<7; 38611624459ef27e06ef2d8e71ec2d35bdd334dbbd9Howard Hinnant static const mask xdigit = 1<<8; 38711624459ef27e06ef2d8e71ec2d35bdd334dbbd9Howard Hinnant static const mask blank = 1<<9; 38811624459ef27e06ef2d8e71ec2d35bdd334dbbd9Howard Hinnant#endif // __GLIBC__ || _WIN32 || __APPLE__ || __FreeBSD__ 389bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static const mask alnum = alpha | digit; 390bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static const mask graph = alnum | punct; 391bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 392bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE ctype_base() {} 393bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}; 394bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 39583eade6abb414e0e814977921bcb6e46853cae03Howard Hinnanttemplate <class _CharT> class _LIBCPP_TYPE_VIS ctype; 396bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 397bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <> 39883eade6abb414e0e814977921bcb6e46853cae03Howard Hinnantclass _LIBCPP_TYPE_VIS ctype<wchar_t> 399bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant : public locale::facet, 400bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant public ctype_base 401bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 402bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantpublic: 403bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef wchar_t char_type; 404324bb03bb94f67ae7f9092810e4e4f6bd8bf506eHoward Hinnant 405bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 406bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant explicit ctype(size_t __refs = 0) 407bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant : locale::facet(__refs) {} 408bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 409bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 410bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant bool is(mask __m, char_type __c) const 411bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 412bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_is(__m, __c); 413bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 414bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 415bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 416bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const char_type* is(const char_type* __low, const char_type* __high, mask* __vec) const 417bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 418bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_is(__low, __high, __vec); 419bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 420bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 421bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 422bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const char_type* scan_is(mask __m, const char_type* __low, const char_type* __high) const 423bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 424bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_scan_is(__m, __low, __high); 425bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 426bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 427bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 428bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const char_type* scan_not(mask __m, const char_type* __low, const char_type* __high) const 429bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 430bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_scan_not(__m, __low, __high); 431bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 432bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 433bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 434bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char_type toupper(char_type __c) const 435bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 436bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_toupper(__c); 437bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 438bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 439bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 440bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const char_type* toupper(char_type* __low, const char_type* __high) const 441bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 442bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_toupper(__low, __high); 443bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 444bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 445bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 446bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char_type tolower(char_type __c) const 447bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 448bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_tolower(__c); 449bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 450bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 451bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 452bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const char_type* tolower(char_type* __low, const char_type* __high) const 453bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 454bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_tolower(__low, __high); 455bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 456bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 457bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 458bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char_type widen(char __c) const 459bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 460bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_widen(__c); 461bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 462bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 463bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 464bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const char* widen(const char* __low, const char* __high, char_type* __to) const 465bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 466bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_widen(__low, __high, __to); 467bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 468bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 469bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 470bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char narrow(char_type __c, char __dfault) const 471bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 472bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_narrow(__c, __dfault); 473bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 474bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 475bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 476bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const char_type* narrow(const char_type* __low, const char_type* __high, char __dfault, char* __to) const 477bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 478bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_narrow(__low, __high, __dfault, __to); 479bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 480bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 481bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static locale::id id; 482bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 483bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantprotected: 484bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ~ctype(); 485bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual bool do_is(mask __m, char_type __c) const; 486bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual const char_type* do_is(const char_type* __low, const char_type* __high, mask* __vec) const; 487bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual const char_type* do_scan_is(mask __m, const char_type* __low, const char_type* __high) const; 488bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual const char_type* do_scan_not(mask __m, const char_type* __low, const char_type* __high) const; 489bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual char_type do_toupper(char_type) const; 490bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual const char_type* do_toupper(char_type* __low, const char_type* __high) const; 491bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual char_type do_tolower(char_type) const; 492bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual const char_type* do_tolower(char_type* __low, const char_type* __high) const; 493bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual char_type do_widen(char) const; 494bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual const char* do_widen(const char* __low, const char* __high, char_type* __dest) const; 495bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual char do_narrow(char_type, char __dfault) const; 496bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual const char_type* do_narrow(const char_type* __low, const char_type* __high, char __dfault, char* __dest) const; 497bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}; 498bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 499bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <> 50083eade6abb414e0e814977921bcb6e46853cae03Howard Hinnantclass _LIBCPP_TYPE_VIS ctype<char> 501bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant : public locale::facet, public ctype_base 502bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 503bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const mask* __tab_; 504bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant bool __del_; 505bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantpublic: 506bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef char char_type; 507bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 508bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant explicit ctype(const mask* __tab = 0, bool __del = false, size_t __refs = 0); 509bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 510bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 511bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant bool is(mask __m, char_type __c) const 512bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 513ec3773c2dadbeadfc5def927116c2ee9d9c53066Howard Hinnant return isascii(__c) ? __tab_[static_cast<int>(__c)] & __m : false; 514bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 515bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 516bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 517bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const char_type* is(const char_type* __low, const char_type* __high, mask* __vec) const 518bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 519bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant for (; __low != __high; ++__low, ++__vec) 520ec3773c2dadbeadfc5def927116c2ee9d9c53066Howard Hinnant *__vec = isascii(*__low) ? __tab_[static_cast<int>(*__low)] : 0; 521bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return __low; 522bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 523bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 524bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 525bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const char_type* scan_is (mask __m, const char_type* __low, const char_type* __high) const 526bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 527bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant for (; __low != __high; ++__low) 528ec3773c2dadbeadfc5def927116c2ee9d9c53066Howard Hinnant if (isascii(*__low) && (__tab_[static_cast<int>(*__low)] & __m)) 529bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant break; 530bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return __low; 531bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 532bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 533bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 534bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const char_type* scan_not(mask __m, const char_type* __low, const char_type* __high) const 535bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 536bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant for (; __low != __high; ++__low) 537ec3773c2dadbeadfc5def927116c2ee9d9c53066Howard Hinnant if (!(isascii(*__low) && (__tab_[static_cast<int>(*__low)] & __m))) 538bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant break; 539bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return __low; 540bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 541bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 542bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 543bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char_type toupper(char_type __c) const 544bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 545bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_toupper(__c); 546bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 547bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 548bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 549bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const char_type* toupper(char_type* __low, const char_type* __high) const 550bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 551bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_toupper(__low, __high); 552bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 553bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 554bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 555bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char_type tolower(char_type __c) const 556bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 557bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_tolower(__c); 558bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 559bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 560bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 561bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const char_type* tolower(char_type* __low, const char_type* __high) const 562bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 563bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_tolower(__low, __high); 564bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 565bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 566bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 567bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char_type widen(char __c) const 568bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 569bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_widen(__c); 570bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 571bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 572bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 573bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const char* widen(const char* __low, const char* __high, char_type* __to) const 574bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 575bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_widen(__low, __high, __to); 576bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 577bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 578bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 579bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char narrow(char_type __c, char __dfault) const 580bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 581bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_narrow(__c, __dfault); 582bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 583bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 584bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 585bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const char* narrow(const char_type* __low, const char_type* __high, char __dfault, char* __to) const 586bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 587bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_narrow(__low, __high, __dfault, __to); 588bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 589bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 590bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static locale::id id; 591bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 592adff4895b2746f30b271bc219713e7ded5ae9677Howard Hinnant#ifdef _CACHED_RUNES 593bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static const size_t table_size = _CACHED_RUNES; 594adff4895b2746f30b271bc219713e7ded5ae9677Howard Hinnant#else 595adff4895b2746f30b271bc219713e7ded5ae9677Howard Hinnant static const size_t table_size = 256; // FIXME: Don't hardcode this. 596adff4895b2746f30b271bc219713e7ded5ae9677Howard Hinnant#endif 597c983454d300a3a1f11055c9dbfedf383a58f56ceHoward Hinnant _LIBCPP_ALWAYS_INLINE const mask* table() const _NOEXCEPT {return __tab_;} 598c983454d300a3a1f11055c9dbfedf383a58f56ceHoward Hinnant static const mask* classic_table() _NOEXCEPT; 599fc2f021bdd3fd69ff62bfc6ceb5c5264afd4ee7dHoward Hinnant#if defined(__GLIBC__) || defined(EMSCRIPTEN) 60062a6ac33a217b0e5a4c42367c6b72e51497246aeSean Hunt static const int* __classic_upper_table() _NOEXCEPT; 60162a6ac33a217b0e5a4c42367c6b72e51497246aeSean Hunt static const int* __classic_lower_table() _NOEXCEPT; 602e59f724f79c5388d6b0a7794fd6d610783bec62dSean Hunt#endif 603a71a9526340325a63cfee83be43be30af25a802cJoerg Sonnenberger#if defined(__NetBSD__) 604a71a9526340325a63cfee83be43be30af25a802cJoerg Sonnenberger static const short* __classic_upper_table() _NOEXCEPT; 605a71a9526340325a63cfee83be43be30af25a802cJoerg Sonnenberger static const short* __classic_lower_table() _NOEXCEPT; 606a71a9526340325a63cfee83be43be30af25a802cJoerg Sonnenberger#endif 607bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 608bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantprotected: 609bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ~ctype(); 610bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual char_type do_toupper(char_type __c) const; 611bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual const char_type* do_toupper(char_type* __low, const char_type* __high) const; 612bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual char_type do_tolower(char_type __c) const; 613bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual const char_type* do_tolower(char_type* __low, const char_type* __high) const; 614bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual char_type do_widen(char __c) const; 615bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual const char* do_widen(const char* __low, const char* __high, char_type* __to) const; 616bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual char do_narrow(char_type __c, char __dfault) const; 617bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual const char* do_narrow(const char_type* __low, const char_type* __high, char __dfault, char* __to) const; 618bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}; 619bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 620bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// template <class CharT> class ctype_byname; 621bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 62283eade6abb414e0e814977921bcb6e46853cae03Howard Hinnanttemplate <class _CharT> class _LIBCPP_TYPE_VIS ctype_byname; 623bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 624bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <> 62583eade6abb414e0e814977921bcb6e46853cae03Howard Hinnantclass _LIBCPP_TYPE_VIS ctype_byname<char> 626bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant : public ctype<char> 627bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 628bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant locale_t __l; 629bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 630bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantpublic: 631bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant explicit ctype_byname(const char*, size_t = 0); 632bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant explicit ctype_byname(const string&, size_t = 0); 633bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 634bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantprotected: 635bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ~ctype_byname(); 636bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual char_type do_toupper(char_type) const; 637bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual const char_type* do_toupper(char_type* __low, const char_type* __high) const; 638bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual char_type do_tolower(char_type) const; 639bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual const char_type* do_tolower(char_type* __low, const char_type* __high) const; 640bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}; 641bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 642bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <> 64383eade6abb414e0e814977921bcb6e46853cae03Howard Hinnantclass _LIBCPP_TYPE_VIS ctype_byname<wchar_t> 644bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant : public ctype<wchar_t> 645bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 646bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant locale_t __l; 647bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 648bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantpublic: 649bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant explicit ctype_byname(const char*, size_t = 0); 650bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant explicit ctype_byname(const string&, size_t = 0); 651bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 652bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantprotected: 653bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ~ctype_byname(); 654bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual bool do_is(mask __m, char_type __c) const; 655bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual const char_type* do_is(const char_type* __low, const char_type* __high, mask* __vec) const; 656bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual const char_type* do_scan_is(mask __m, const char_type* __low, const char_type* __high) const; 657bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual const char_type* do_scan_not(mask __m, const char_type* __low, const char_type* __high) const; 658bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual char_type do_toupper(char_type) const; 659bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual const char_type* do_toupper(char_type* __low, const char_type* __high) const; 660bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual char_type do_tolower(char_type) const; 661bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual const char_type* do_tolower(char_type* __low, const char_type* __high) const; 662bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual char_type do_widen(char) const; 663bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual const char* do_widen(const char* __low, const char* __high, char_type* __dest) const; 664bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual char do_narrow(char_type, char __dfault) const; 665bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual const char_type* do_narrow(const char_type* __low, const char_type* __high, char __dfault, char* __dest) const; 666bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}; 667bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 668bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <class _CharT> 669bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantinline _LIBCPP_INLINE_VISIBILITY 670bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantbool 671bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantisspace(_CharT __c, const locale& __loc) 672bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 673bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return use_facet<ctype<_CharT> >(__loc).is(ctype_base::space, __c); 674bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 675bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 676bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <class _CharT> 677bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantinline _LIBCPP_INLINE_VISIBILITY 678bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantbool 679bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantisprint(_CharT __c, const locale& __loc) 680bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 681bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return use_facet<ctype<_CharT> >(__loc).is(ctype_base::print, __c); 682bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 683bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 684bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <class _CharT> 685bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantinline _LIBCPP_INLINE_VISIBILITY 686bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantbool 687bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantiscntrl(_CharT __c, const locale& __loc) 688bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 689bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return use_facet<ctype<_CharT> >(__loc).is(ctype_base::cntrl, __c); 690bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 691bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 692bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <class _CharT> 693bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantinline _LIBCPP_INLINE_VISIBILITY 694bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantbool 695bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantisupper(_CharT __c, const locale& __loc) 696bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 697bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return use_facet<ctype<_CharT> >(__loc).is(ctype_base::upper, __c); 698bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 699bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 700bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <class _CharT> 701bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantinline _LIBCPP_INLINE_VISIBILITY 702bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantbool 703bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantislower(_CharT __c, const locale& __loc) 704bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 705bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return use_facet<ctype<_CharT> >(__loc).is(ctype_base::lower, __c); 706bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 707bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 708bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <class _CharT> 709bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantinline _LIBCPP_INLINE_VISIBILITY 710bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantbool 711bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantisalpha(_CharT __c, const locale& __loc) 712bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 713bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return use_facet<ctype<_CharT> >(__loc).is(ctype_base::alpha, __c); 714bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 715bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 716bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <class _CharT> 717bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantinline _LIBCPP_INLINE_VISIBILITY 718bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantbool 719bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantisdigit(_CharT __c, const locale& __loc) 720bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 721bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return use_facet<ctype<_CharT> >(__loc).is(ctype_base::digit, __c); 722bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 723bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 724bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <class _CharT> 725bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantinline _LIBCPP_INLINE_VISIBILITY 726bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantbool 727bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantispunct(_CharT __c, const locale& __loc) 728bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 729bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return use_facet<ctype<_CharT> >(__loc).is(ctype_base::punct, __c); 730bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 731bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 732bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <class _CharT> 733bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantinline _LIBCPP_INLINE_VISIBILITY 734bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantbool 735bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantisxdigit(_CharT __c, const locale& __loc) 736bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 737bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return use_facet<ctype<_CharT> >(__loc).is(ctype_base::xdigit, __c); 738bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 739bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 740bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <class _CharT> 741bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantinline _LIBCPP_INLINE_VISIBILITY 742bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantbool 743bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantisalnum(_CharT __c, const locale& __loc) 744bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 745bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return use_facet<ctype<_CharT> >(__loc).is(ctype_base::alnum, __c); 746bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 747bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 748bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <class _CharT> 749bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantinline _LIBCPP_INLINE_VISIBILITY 750bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantbool 751bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantisgraph(_CharT __c, const locale& __loc) 752bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 753bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return use_facet<ctype<_CharT> >(__loc).is(ctype_base::graph, __c); 754bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 755bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 756bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <class _CharT> 757bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantinline _LIBCPP_INLINE_VISIBILITY 758bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant_CharT 759bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttoupper(_CharT __c, const locale& __loc) 760bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 761bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return use_facet<ctype<_CharT> >(__loc).toupper(__c); 762bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 763bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 764bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <class _CharT> 765bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantinline _LIBCPP_INLINE_VISIBILITY 766bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant_CharT 767bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttolower(_CharT __c, const locale& __loc) 768bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 769bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return use_facet<ctype<_CharT> >(__loc).tolower(__c); 770bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 771bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 772bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// codecvt_base 773bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 77483eade6abb414e0e814977921bcb6e46853cae03Howard Hinnantclass _LIBCPP_TYPE_VIS codecvt_base 775bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 776bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantpublic: 777bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE codecvt_base() {} 778bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant enum result {ok, partial, error, noconv}; 779bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}; 780bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 781bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// template <class internT, class externT, class stateT> class codecvt; 782bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 78383eade6abb414e0e814977921bcb6e46853cae03Howard Hinnanttemplate <class _InternT, class _ExternT, class _StateT> class _LIBCPP_TYPE_VIS codecvt; 784bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 785bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// template <> class codecvt<char, char, mbstate_t> 786bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 787bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <> 78883eade6abb414e0e814977921bcb6e46853cae03Howard Hinnantclass _LIBCPP_TYPE_VIS codecvt<char, char, mbstate_t> 789bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant : public locale::facet, 790bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant public codecvt_base 791bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 792bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantpublic: 793bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef char intern_type; 794bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef char extern_type; 795bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef mbstate_t state_type; 796bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 797bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 798bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant explicit codecvt(size_t __refs = 0) 799bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant : locale::facet(__refs) {} 800bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 801bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 802bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant result out(state_type& __st, 803bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const intern_type* __frm, const intern_type* __frm_end, const intern_type*& __frm_nxt, 804bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const 805bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 806bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_out(__st, __frm, __frm_end, __frm_nxt, __to, __to_end, __to_nxt); 807bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 808bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 809bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 810bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant result unshift(state_type& __st, 811bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const 812bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 813bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_unshift(__st, __to, __to_end, __to_nxt); 814bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 815bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 816bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 817bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant result in(state_type& __st, 818bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const extern_type* __frm, const extern_type* __frm_end, const extern_type*& __frm_nxt, 819bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant intern_type* __to, intern_type* __to_end, intern_type*& __to_nxt) const 820bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 821bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_in(__st, __frm, __frm_end, __frm_nxt, __to, __to_end, __to_nxt); 822bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 823bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 824bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 825c983454d300a3a1f11055c9dbfedf383a58f56ceHoward Hinnant int encoding() const _NOEXCEPT 826bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 827bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_encoding(); 828bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 829bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 830bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 831c983454d300a3a1f11055c9dbfedf383a58f56ceHoward Hinnant bool always_noconv() const _NOEXCEPT 832bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 833bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_always_noconv(); 834bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 835bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 836bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 837bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant int length(state_type& __st, const extern_type* __frm, const extern_type* __end, size_t __mx) const 838bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 839bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_length(__st, __frm, __end, __mx); 840bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 841bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 842bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 843c983454d300a3a1f11055c9dbfedf383a58f56ceHoward Hinnant int max_length() const _NOEXCEPT 844bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 845bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_max_length(); 846bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 847bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 848bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static locale::id id; 849bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 850bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantprotected: 851bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 852bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant explicit codecvt(const char*, size_t __refs = 0) 853bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant : locale::facet(__refs) {} 854bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 855bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ~codecvt(); 856bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 857bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual result do_out(state_type& __st, 858bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const intern_type* __frm, const intern_type* __frm_end, const intern_type*& __frm_nxt, 859bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const; 860bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual result do_in(state_type& __st, 861bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const extern_type* __frm, const extern_type* __frm_end, const extern_type*& __frm_nxt, 862bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant intern_type* __to, intern_type* __to_end, intern_type*& __to_nxt) const; 863bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual result do_unshift(state_type& __st, 864bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const; 865c983454d300a3a1f11055c9dbfedf383a58f56ceHoward Hinnant virtual int do_encoding() const _NOEXCEPT; 866c983454d300a3a1f11055c9dbfedf383a58f56ceHoward Hinnant virtual bool do_always_noconv() const _NOEXCEPT; 867bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual int do_length(state_type& __st, const extern_type* __frm, const extern_type* __end, size_t __mx) const; 868c983454d300a3a1f11055c9dbfedf383a58f56ceHoward Hinnant virtual int do_max_length() const _NOEXCEPT; 869bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}; 870bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 871bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// template <> class codecvt<wchar_t, char, mbstate_t> 872bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 873bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <> 87483eade6abb414e0e814977921bcb6e46853cae03Howard Hinnantclass _LIBCPP_TYPE_VIS codecvt<wchar_t, char, mbstate_t> 875bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant : public locale::facet, 876bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant public codecvt_base 877bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 878bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant locale_t __l; 879bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantpublic: 880bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef wchar_t intern_type; 881bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef char extern_type; 882bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef mbstate_t state_type; 883bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 884bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant explicit codecvt(size_t __refs = 0); 885bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 886bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 887bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant result out(state_type& __st, 888bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const intern_type* __frm, const intern_type* __frm_end, const intern_type*& __frm_nxt, 889bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const 890bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 891bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_out(__st, __frm, __frm_end, __frm_nxt, __to, __to_end, __to_nxt); 892bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 893bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 894bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 895bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant result unshift(state_type& __st, 896bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const 897bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 898bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_unshift(__st, __to, __to_end, __to_nxt); 899bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 900bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 901bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 902bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant result in(state_type& __st, 903bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const extern_type* __frm, const extern_type* __frm_end, const extern_type*& __frm_nxt, 904bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant intern_type* __to, intern_type* __to_end, intern_type*& __to_nxt) const 905bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 906bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_in(__st, __frm, __frm_end, __frm_nxt, __to, __to_end, __to_nxt); 907bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 908bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 909bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 910c983454d300a3a1f11055c9dbfedf383a58f56ceHoward Hinnant int encoding() const _NOEXCEPT 911bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 912bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_encoding(); 913bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 914bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 915bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 916c983454d300a3a1f11055c9dbfedf383a58f56ceHoward Hinnant bool always_noconv() const _NOEXCEPT 917bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 918bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_always_noconv(); 919bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 920bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 921bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 922bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant int length(state_type& __st, const extern_type* __frm, const extern_type* __end, size_t __mx) const 923bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 924bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_length(__st, __frm, __end, __mx); 925bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 926bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 927bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 928c983454d300a3a1f11055c9dbfedf383a58f56ceHoward Hinnant int max_length() const _NOEXCEPT 929bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 930bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_max_length(); 931bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 932bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 933bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static locale::id id; 934bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 935bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantprotected: 936bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant explicit codecvt(const char*, size_t __refs = 0); 937bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 938bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ~codecvt(); 939bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 940bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual result do_out(state_type& __st, 941bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const intern_type* __frm, const intern_type* __frm_end, const intern_type*& __frm_nxt, 942bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const; 943bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual result do_in(state_type& __st, 944bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const extern_type* __frm, const extern_type* __frm_end, const extern_type*& __frm_nxt, 945bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant intern_type* __to, intern_type* __to_end, intern_type*& __to_nxt) const; 946bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual result do_unshift(state_type& __st, 947bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const; 948c983454d300a3a1f11055c9dbfedf383a58f56ceHoward Hinnant virtual int do_encoding() const _NOEXCEPT; 949c983454d300a3a1f11055c9dbfedf383a58f56ceHoward Hinnant virtual bool do_always_noconv() const _NOEXCEPT; 950bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual int do_length(state_type&, const extern_type* __frm, const extern_type* __end, size_t __mx) const; 951c983454d300a3a1f11055c9dbfedf383a58f56ceHoward Hinnant virtual int do_max_length() const _NOEXCEPT; 952bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}; 953bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 954bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// template <> class codecvt<char16_t, char, mbstate_t> 955bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 956bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <> 95783eade6abb414e0e814977921bcb6e46853cae03Howard Hinnantclass _LIBCPP_TYPE_VIS codecvt<char16_t, char, mbstate_t> 958bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant : public locale::facet, 959bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant public codecvt_base 960bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 961bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantpublic: 962bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef char16_t intern_type; 963bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef char extern_type; 964bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef mbstate_t state_type; 965bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 966bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 967bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant explicit codecvt(size_t __refs = 0) 968bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant : locale::facet(__refs) {} 969bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 970bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 971bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant result out(state_type& __st, 972bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const intern_type* __frm, const intern_type* __frm_end, const intern_type*& __frm_nxt, 973bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const 974bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 975bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_out(__st, __frm, __frm_end, __frm_nxt, __to, __to_end, __to_nxt); 976bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 977bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 978bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 979bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant result unshift(state_type& __st, 980bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const 981bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 982bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_unshift(__st, __to, __to_end, __to_nxt); 983bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 984bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 985bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 986bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant result in(state_type& __st, 987bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const extern_type* __frm, const extern_type* __frm_end, const extern_type*& __frm_nxt, 988bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant intern_type* __to, intern_type* __to_end, intern_type*& __to_nxt) const 989bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 990bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_in(__st, __frm, __frm_end, __frm_nxt, __to, __to_end, __to_nxt); 991bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 992bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 993bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 994c983454d300a3a1f11055c9dbfedf383a58f56ceHoward Hinnant int encoding() const _NOEXCEPT 995bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 996bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_encoding(); 997bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 998bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 999bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 1000c983454d300a3a1f11055c9dbfedf383a58f56ceHoward Hinnant bool always_noconv() const _NOEXCEPT 1001bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 1002bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_always_noconv(); 1003bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 1004bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1005bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 1006bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant int length(state_type& __st, const extern_type* __frm, const extern_type* __end, size_t __mx) const 1007bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 1008bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_length(__st, __frm, __end, __mx); 1009bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 1010bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1011bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 1012c983454d300a3a1f11055c9dbfedf383a58f56ceHoward Hinnant int max_length() const _NOEXCEPT 1013bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 1014bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_max_length(); 1015bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 1016bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1017bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static locale::id id; 1018bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1019bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantprotected: 1020bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 1021bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant explicit codecvt(const char*, size_t __refs = 0) 1022bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant : locale::facet(__refs) {} 1023bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1024bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ~codecvt(); 1025bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1026bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual result do_out(state_type& __st, 1027bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const intern_type* __frm, const intern_type* __frm_end, const intern_type*& __frm_nxt, 1028bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const; 1029bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual result do_in(state_type& __st, 1030bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const extern_type* __frm, const extern_type* __frm_end, const extern_type*& __frm_nxt, 1031bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant intern_type* __to, intern_type* __to_end, intern_type*& __to_nxt) const; 1032bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual result do_unshift(state_type& __st, 1033bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const; 1034c983454d300a3a1f11055c9dbfedf383a58f56ceHoward Hinnant virtual int do_encoding() const _NOEXCEPT; 1035c983454d300a3a1f11055c9dbfedf383a58f56ceHoward Hinnant virtual bool do_always_noconv() const _NOEXCEPT; 1036bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual int do_length(state_type&, const extern_type* __frm, const extern_type* __end, size_t __mx) const; 1037c983454d300a3a1f11055c9dbfedf383a58f56ceHoward Hinnant virtual int do_max_length() const _NOEXCEPT; 1038bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}; 1039bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1040bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// template <> class codecvt<char32_t, char, mbstate_t> 1041bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1042bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <> 104383eade6abb414e0e814977921bcb6e46853cae03Howard Hinnantclass _LIBCPP_TYPE_VIS codecvt<char32_t, char, mbstate_t> 1044bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant : public locale::facet, 1045bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant public codecvt_base 1046bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 1047bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantpublic: 1048bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef char32_t intern_type; 1049bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef char extern_type; 1050bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef mbstate_t state_type; 1051bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1052bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 1053bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant explicit codecvt(size_t __refs = 0) 1054bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant : locale::facet(__refs) {} 1055bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1056bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 1057bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant result out(state_type& __st, 1058bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const intern_type* __frm, const intern_type* __frm_end, const intern_type*& __frm_nxt, 1059bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const 1060bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 1061bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_out(__st, __frm, __frm_end, __frm_nxt, __to, __to_end, __to_nxt); 1062bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 1063bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1064bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 1065bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant result unshift(state_type& __st, 1066bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const 1067bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 1068bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_unshift(__st, __to, __to_end, __to_nxt); 1069bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 1070bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1071bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 1072bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant result in(state_type& __st, 1073bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const extern_type* __frm, const extern_type* __frm_end, const extern_type*& __frm_nxt, 1074bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant intern_type* __to, intern_type* __to_end, intern_type*& __to_nxt) const 1075bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 1076bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_in(__st, __frm, __frm_end, __frm_nxt, __to, __to_end, __to_nxt); 1077bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 1078bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1079bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 1080c983454d300a3a1f11055c9dbfedf383a58f56ceHoward Hinnant int encoding() const _NOEXCEPT 1081bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 1082bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_encoding(); 1083bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 1084bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1085bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 1086c983454d300a3a1f11055c9dbfedf383a58f56ceHoward Hinnant bool always_noconv() const _NOEXCEPT 1087bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 1088bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_always_noconv(); 1089bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 1090bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1091bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 1092bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant int length(state_type& __st, const extern_type* __frm, const extern_type* __end, size_t __mx) const 1093bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 1094bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_length(__st, __frm, __end, __mx); 1095bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 1096bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1097bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 1098c983454d300a3a1f11055c9dbfedf383a58f56ceHoward Hinnant int max_length() const _NOEXCEPT 1099bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 1100bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_max_length(); 1101bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 1102bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1103bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static locale::id id; 1104bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1105bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantprotected: 1106bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 1107bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant explicit codecvt(const char*, size_t __refs = 0) 1108bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant : locale::facet(__refs) {} 1109bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1110bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ~codecvt(); 1111bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1112bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual result do_out(state_type& __st, 1113bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const intern_type* __frm, const intern_type* __frm_end, const intern_type*& __frm_nxt, 1114bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const; 1115bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual result do_in(state_type& __st, 1116bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const extern_type* __frm, const extern_type* __frm_end, const extern_type*& __frm_nxt, 1117bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant intern_type* __to, intern_type* __to_end, intern_type*& __to_nxt) const; 1118bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual result do_unshift(state_type& __st, 1119bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const; 1120c983454d300a3a1f11055c9dbfedf383a58f56ceHoward Hinnant virtual int do_encoding() const _NOEXCEPT; 1121c983454d300a3a1f11055c9dbfedf383a58f56ceHoward Hinnant virtual bool do_always_noconv() const _NOEXCEPT; 1122bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual int do_length(state_type&, const extern_type* __frm, const extern_type* __end, size_t __mx) const; 1123c983454d300a3a1f11055c9dbfedf383a58f56ceHoward Hinnant virtual int do_max_length() const _NOEXCEPT; 1124bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}; 1125bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1126bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// template <class _InternT, class _ExternT, class _StateT> class codecvt_byname 1127bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1128bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <class _InternT, class _ExternT, class _StateT> 112983eade6abb414e0e814977921bcb6e46853cae03Howard Hinnantclass _LIBCPP_TYPE_VIS codecvt_byname 1130bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant : public codecvt<_InternT, _ExternT, _StateT> 1131bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 1132bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantpublic: 1133b0be42b2ce0dbde30fb64a96586411f35d2b1aedHoward Hinnant _LIBCPP_ALWAYS_INLINE 1134bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant explicit codecvt_byname(const char* __nm, size_t __refs = 0) 1135bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant : codecvt<_InternT, _ExternT, _StateT>(__nm, __refs) {} 1136b0be42b2ce0dbde30fb64a96586411f35d2b1aedHoward Hinnant _LIBCPP_ALWAYS_INLINE 1137bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant explicit codecvt_byname(const string& __nm, size_t __refs = 0) 1138bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant : codecvt<_InternT, _ExternT, _StateT>(__nm.c_str(), __refs) {} 1139bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantprotected: 1140bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ~codecvt_byname(); 1141bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}; 1142bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1143bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <class _InternT, class _ExternT, class _StateT> 1144bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantcodecvt_byname<_InternT, _ExternT, _StateT>::~codecvt_byname() 1145bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 1146bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 1147bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1148ff9267709d33962b4ef8f0890321414da86bd3dfHoward Hinnant_LIBCPP_EXTERN_TEMPLATE(class codecvt_byname<char, char, mbstate_t>) 1149ff9267709d33962b4ef8f0890321414da86bd3dfHoward Hinnant_LIBCPP_EXTERN_TEMPLATE(class codecvt_byname<wchar_t, char, mbstate_t>) 1150ff9267709d33962b4ef8f0890321414da86bd3dfHoward Hinnant_LIBCPP_EXTERN_TEMPLATE(class codecvt_byname<char16_t, char, mbstate_t>) 1151ff9267709d33962b4ef8f0890321414da86bd3dfHoward Hinnant_LIBCPP_EXTERN_TEMPLATE(class codecvt_byname<char32_t, char, mbstate_t>) 1152bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 115383eade6abb414e0e814977921bcb6e46853cae03Howard Hinnant_LIBCPP_FUNC_VIS void __throw_runtime_error(const char*); 1154bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 11559996844df0f22a68a1af6d30c611be1f1ebf1486Howard Hinnanttemplate <size_t _Np> 1156bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantstruct __narrow_to_utf8 1157bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 1158bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant template <class _OutputIterator, class _CharT> 1159bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _OutputIterator 1160bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant operator()(_OutputIterator __s, const _CharT* __wb, const _CharT* __we) const; 1161bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}; 1162bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1163bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <> 1164bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantstruct __narrow_to_utf8<8> 1165bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 1166bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant template <class _OutputIterator, class _CharT> 1167bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 1168bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _OutputIterator 1169bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant operator()(_OutputIterator __s, const _CharT* __wb, const _CharT* __we) const 1170bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 1171bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant for (; __wb < __we; ++__wb, ++__s) 1172bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant *__s = *__wb; 1173bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return __s; 1174bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 1175bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}; 1176bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1177bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <> 1178bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantstruct __narrow_to_utf8<16> 1179bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant : public codecvt<char16_t, char, mbstate_t> 1180bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 1181bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 1182bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __narrow_to_utf8() : codecvt<char16_t, char, mbstate_t>(1) {} 1183bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1184bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ~__narrow_to_utf8(); 1185bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1186bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant template <class _OutputIterator, class _CharT> 1187bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 1188bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _OutputIterator 1189bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant operator()(_OutputIterator __s, const _CharT* __wb, const _CharT* __we) const 1190bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 1191bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant result __r = ok; 1192bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant mbstate_t __mb; 1193bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant while (__wb < __we && __r != error) 1194bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 1195bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const int __sz = 32; 1196bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char __buf[__sz]; 1197bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char* __bn; 1198bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const char16_t* __wn = (const char16_t*)__wb; 1199bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __r = do_out(__mb, (const char16_t*)__wb, (const char16_t*)__we, __wn, 1200bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __buf, __buf+__sz, __bn); 1201bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant if (__r == codecvt_base::error || __wn == (const char16_t*)__wb) 1202bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __throw_runtime_error("locale not supported"); 1203bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant for (const char* __p = __buf; __p < __bn; ++__p, ++__s) 1204bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant *__s = *__p; 1205bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __wb = (const _CharT*)__wn; 1206bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 1207bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return __s; 1208bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 1209bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}; 1210bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1211bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <> 1212bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantstruct __narrow_to_utf8<32> 1213bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant : public codecvt<char32_t, char, mbstate_t> 1214bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 1215bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 1216bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __narrow_to_utf8() : codecvt<char32_t, char, mbstate_t>(1) {} 1217bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1218bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ~__narrow_to_utf8(); 1219bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1220bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant template <class _OutputIterator, class _CharT> 1221bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 1222bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _OutputIterator 1223bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant operator()(_OutputIterator __s, const _CharT* __wb, const _CharT* __we) const 1224bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 1225bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant result __r = ok; 1226bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant mbstate_t __mb; 1227bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant while (__wb < __we && __r != error) 1228bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 1229bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const int __sz = 32; 1230bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char __buf[__sz]; 1231bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char* __bn; 1232bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const char32_t* __wn = (const char32_t*)__wb; 1233bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __r = do_out(__mb, (const char32_t*)__wb, (const char32_t*)__we, __wn, 1234bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __buf, __buf+__sz, __bn); 1235bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant if (__r == codecvt_base::error || __wn == (const char32_t*)__wb) 1236bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __throw_runtime_error("locale not supported"); 1237bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant for (const char* __p = __buf; __p < __bn; ++__p, ++__s) 1238bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant *__s = *__p; 1239bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __wb = (const _CharT*)__wn; 1240bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 1241bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return __s; 1242bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 1243bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}; 1244bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 12459996844df0f22a68a1af6d30c611be1f1ebf1486Howard Hinnanttemplate <size_t _Np> 1246bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantstruct __widen_from_utf8 1247bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 1248bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant template <class _OutputIterator> 1249bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _OutputIterator 1250bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant operator()(_OutputIterator __s, const char* __nb, const char* __ne) const; 1251bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}; 1252bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1253bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <> 1254bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantstruct __widen_from_utf8<8> 1255bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 1256bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant template <class _OutputIterator> 1257bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 1258bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _OutputIterator 1259bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant operator()(_OutputIterator __s, const char* __nb, const char* __ne) const 1260bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 1261bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant for (; __nb < __ne; ++__nb, ++__s) 1262bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant *__s = *__nb; 1263bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return __s; 1264bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 1265bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}; 1266bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1267bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <> 1268bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantstruct __widen_from_utf8<16> 1269bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant : public codecvt<char16_t, char, mbstate_t> 1270bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 1271bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 1272bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __widen_from_utf8() : codecvt<char16_t, char, mbstate_t>(1) {} 1273bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1274bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ~__widen_from_utf8(); 1275bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1276bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant template <class _OutputIterator> 1277bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 1278bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _OutputIterator 1279bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant operator()(_OutputIterator __s, const char* __nb, const char* __ne) const 1280bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 1281bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant result __r = ok; 1282bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant mbstate_t __mb; 1283bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant while (__nb < __ne && __r != error) 1284bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 1285bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const int __sz = 32; 1286bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char16_t __buf[__sz]; 1287bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char16_t* __bn; 1288bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const char* __nn = __nb; 1289bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __r = do_in(__mb, __nb, __ne - __nb > __sz ? __nb+__sz : __ne, __nn, 1290bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __buf, __buf+__sz, __bn); 1291bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant if (__r == codecvt_base::error || __nn == __nb) 1292bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __throw_runtime_error("locale not supported"); 1293bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant for (const char16_t* __p = __buf; __p < __bn; ++__p, ++__s) 1294bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant *__s = (wchar_t)*__p; 1295bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __nb = __nn; 1296bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 1297bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return __s; 1298bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 1299bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}; 1300bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1301bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <> 1302bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantstruct __widen_from_utf8<32> 1303bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant : public codecvt<char32_t, char, mbstate_t> 1304bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 1305bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 1306bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __widen_from_utf8() : codecvt<char32_t, char, mbstate_t>(1) {} 1307bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1308bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ~__widen_from_utf8(); 1309bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1310bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant template <class _OutputIterator> 1311bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 1312bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _OutputIterator 1313bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant operator()(_OutputIterator __s, const char* __nb, const char* __ne) const 1314bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 1315bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant result __r = ok; 1316bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant mbstate_t __mb; 1317bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant while (__nb < __ne && __r != error) 1318bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 1319bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const int __sz = 32; 1320bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char32_t __buf[__sz]; 1321bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char32_t* __bn; 1322bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const char* __nn = __nb; 1323bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __r = do_in(__mb, __nb, __ne - __nb > __sz ? __nb+__sz : __ne, __nn, 1324bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __buf, __buf+__sz, __bn); 1325bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant if (__r == codecvt_base::error || __nn == __nb) 1326bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __throw_runtime_error("locale not supported"); 1327bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant for (const char32_t* __p = __buf; __p < __bn; ++__p, ++__s) 1328bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant *__s = (wchar_t)*__p; 1329bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __nb = __nn; 1330bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 1331bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return __s; 1332bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 1333bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}; 1334bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1335bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// template <class charT> class numpunct 1336bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 133783eade6abb414e0e814977921bcb6e46853cae03Howard Hinnanttemplate <class _CharT> class _LIBCPP_TYPE_VIS numpunct; 1338bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1339bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <> 134083eade6abb414e0e814977921bcb6e46853cae03Howard Hinnantclass _LIBCPP_TYPE_VIS numpunct<char> 1341bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant : public locale::facet 1342bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 1343bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantpublic: 1344bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef char char_type; 1345bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef basic_string<char_type> string_type; 1346bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1347bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant explicit numpunct(size_t __refs = 0); 1348bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1349bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE char_type decimal_point() const {return do_decimal_point();} 1350bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE char_type thousands_sep() const {return do_thousands_sep();} 1351bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE string grouping() const {return do_grouping();} 1352bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE string_type truename() const {return do_truename();} 1353bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE string_type falsename() const {return do_falsename();} 1354bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1355bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static locale::id id; 1356bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1357bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantprotected: 1358bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ~numpunct(); 1359bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual char_type do_decimal_point() const; 1360bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual char_type do_thousands_sep() const; 1361bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual string do_grouping() const; 1362bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual string_type do_truename() const; 1363bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual string_type do_falsename() const; 1364bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1365bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char_type __decimal_point_; 1366bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char_type __thousands_sep_; 1367bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant string __grouping_; 1368bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}; 1369bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1370bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <> 137183eade6abb414e0e814977921bcb6e46853cae03Howard Hinnantclass _LIBCPP_TYPE_VIS numpunct<wchar_t> 1372bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant : public locale::facet 1373bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 1374bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantpublic: 1375bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef wchar_t char_type; 1376bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef basic_string<char_type> string_type; 1377bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1378bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant explicit numpunct(size_t __refs = 0); 1379bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1380bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE char_type decimal_point() const {return do_decimal_point();} 1381bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE char_type thousands_sep() const {return do_thousands_sep();} 1382bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE string grouping() const {return do_grouping();} 1383bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE string_type truename() const {return do_truename();} 1384bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE string_type falsename() const {return do_falsename();} 1385bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1386bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static locale::id id; 1387bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1388bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantprotected: 1389bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ~numpunct(); 1390bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual char_type do_decimal_point() const; 1391bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual char_type do_thousands_sep() const; 1392bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual string do_grouping() const; 1393bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual string_type do_truename() const; 1394bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual string_type do_falsename() const; 1395bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1396bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char_type __decimal_point_; 1397bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char_type __thousands_sep_; 1398bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant string __grouping_; 1399bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}; 1400bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1401bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// template <class charT> class numpunct_byname 1402bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 140383eade6abb414e0e814977921bcb6e46853cae03Howard Hinnanttemplate <class charT> class _LIBCPP_TYPE_VIS numpunct_byname; 1404bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1405bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <> 140683eade6abb414e0e814977921bcb6e46853cae03Howard Hinnantclass _LIBCPP_TYPE_VIS numpunct_byname<char> 1407bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant: public numpunct<char> 1408bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 1409bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantpublic: 1410bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef char char_type; 1411bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef basic_string<char_type> string_type; 1412bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1413bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant explicit numpunct_byname(const char* __nm, size_t __refs = 0); 1414bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant explicit numpunct_byname(const string& __nm, size_t __refs = 0); 1415bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1416bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantprotected: 1417bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ~numpunct_byname(); 1418bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1419bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantprivate: 1420bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant void __init(const char*); 1421bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}; 1422bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1423bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <> 142483eade6abb414e0e814977921bcb6e46853cae03Howard Hinnantclass _LIBCPP_TYPE_VIS numpunct_byname<wchar_t> 1425bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant: public numpunct<wchar_t> 1426bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 1427bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantpublic: 1428bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef wchar_t char_type; 1429bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef basic_string<char_type> string_type; 1430bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1431bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant explicit numpunct_byname(const char* __nm, size_t __refs = 0); 1432bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant explicit numpunct_byname(const string& __nm, size_t __refs = 0); 1433bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1434bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantprotected: 1435bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ~numpunct_byname(); 1436bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1437bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantprivate: 1438bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant void __init(const char*); 1439bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}; 1440bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1441bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant_LIBCPP_END_NAMESPACE_STD 1442bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1443bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#endif // _LIBCPP___LOCALE 1444