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