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> 22ef5aa93b9cdc5bfea3e4c59bafd784a9ff968decHoward Hinnant#if defined(_LIBCPP_MSVCRT) || defined(__MINGW32__) 2314fa9f9d8ff5a4541404f3e23b91188e74c56f31Howard Hinnant# include <support/win32/locale_win32.h> 24be3d117702db7dc87b1ad12a365e472bb8846f89Marshall Clow#elif defined(_AIX) 257f76450ee9f14ed646a38f43a09dc49dde413281Howard Hinnant# include <support/ibm/xlocale.h> 262ef012e47441428f752c6a29d2927513669dda30Dan Albert#elif defined(__ANDROID__) 27e45cf3e8b5b03c41c5d025ad443debdcc54ab58dMarshall Clow// Android gained the locale aware functions in L (API level 21) 28e45cf3e8b5b03c41c5d025ad443debdcc54ab58dMarshall Clow# include <android/api-level.h> 29e45cf3e8b5b03c41c5d025ad443debdcc54ab58dMarshall Clow# if __ANDROID_API__ <= 20 30e45cf3e8b5b03c41c5d025ad443debdcc54ab58dMarshall Clow# include <support/android/locale_bionic.h> 31e45cf3e8b5b03c41c5d025ad443debdcc54ab58dMarshall Clow# endif 3206086258d3d8c48a916ec51c33e1ad8f46821b81Dan Albert#elif defined(__sun__) 335cb52824fc2a0caf233311e91d9a2a53368f04adDan Albert# include <xlocale.h> 3406086258d3d8c48a916ec51c33e1ad8f46821b81Dan Albert# include <support/solaris/xlocale.h> 3506086258d3d8c48a916ec51c33e1ad8f46821b81Dan Albert#elif defined(_NEWLIB_VERSION) 3606086258d3d8c48a916ec51c33e1ad8f46821b81Dan Albert# include <support/newlib/xlocale.h> 37e45cf3e8b5b03c41c5d025ad443debdcc54ab58dMarshall Clow#elif (defined(__GLIBC__) || defined(__APPLE__) || defined(__FreeBSD__) \ 3806086258d3d8c48a916ec51c33e1ad8f46821b81Dan Albert || defined(__EMSCRIPTEN__) || defined(__IBMCPP__)) 3992a07003b2ce449b22709fbd9b4f1e49b3a2fd3eHoward Hinnant# include <xlocale.h> 40e45cf3e8b5b03c41c5d025ad443debdcc54ab58dMarshall Clow#endif // __GLIBC__ || __APPLE__ || __FreeBSD__ || __sun__ || __EMSCRIPTEN__ || __IBMCPP__ 41bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 4208e17472e4d5434b668dd4c63e3fa5f4b45337b9Howard Hinnant#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 43bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#pragma GCC system_header 4408e17472e4d5434b668dd4c63e3fa5f4b45337b9Howard Hinnant#endif 45bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 46bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant_LIBCPP_BEGIN_NAMESPACE_STD 47bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 4883eade6abb414e0e814977921bcb6e46853cae03Howard Hinnantclass _LIBCPP_TYPE_VIS locale; 49bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 5033be35effe82ca5a7a2b285fb9d8176dd94e5e8cHoward Hinnanttemplate <class _Facet> 5133be35effe82ca5a7a2b285fb9d8176dd94e5e8cHoward Hinnant_LIBCPP_INLINE_VISIBILITY 5233be35effe82ca5a7a2b285fb9d8176dd94e5e8cHoward Hinnantbool 5333be35effe82ca5a7a2b285fb9d8176dd94e5e8cHoward Hinnanthas_facet(const locale&) _NOEXCEPT; 5433be35effe82ca5a7a2b285fb9d8176dd94e5e8cHoward Hinnant 5533be35effe82ca5a7a2b285fb9d8176dd94e5e8cHoward Hinnanttemplate <class _Facet> 5633be35effe82ca5a7a2b285fb9d8176dd94e5e8cHoward Hinnant_LIBCPP_INLINE_VISIBILITY 5733be35effe82ca5a7a2b285fb9d8176dd94e5e8cHoward Hinnantconst _Facet& 5833be35effe82ca5a7a2b285fb9d8176dd94e5e8cHoward Hinnantuse_facet(const locale&); 59bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 6083eade6abb414e0e814977921bcb6e46853cae03Howard Hinnantclass _LIBCPP_TYPE_VIS locale 61bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 62bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantpublic: 63bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant // types: 6483eade6abb414e0e814977921bcb6e46853cae03Howard Hinnant class _LIBCPP_TYPE_VIS facet; 6583eade6abb414e0e814977921bcb6e46853cae03Howard Hinnant class _LIBCPP_TYPE_VIS id; 66bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 67bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef int category; 68bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static const category // values assigned here are for exposition only 69bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant none = 0, 70bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant collate = LC_COLLATE_MASK, 71bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ctype = LC_CTYPE_MASK, 72bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant monetary = LC_MONETARY_MASK, 73bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant numeric = LC_NUMERIC_MASK, 74bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant time = LC_TIME_MASK, 75bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant messages = LC_MESSAGES_MASK, 76bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant all = collate | ctype | monetary | numeric | time | messages; 77bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 78bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant // construct/copy/destroy: 79c983454d300a3a1f11055c9dbfedf383a58f56ceHoward Hinnant locale() _NOEXCEPT; 80c983454d300a3a1f11055c9dbfedf383a58f56ceHoward Hinnant locale(const locale&) _NOEXCEPT; 81bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant explicit locale(const char*); 82bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant explicit locale(const string&); 83bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant locale(const locale&, const char*, category); 84bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant locale(const locale&, const string&, category); 852d72b1e393e35d61917d6d0ce069482ab11e96d1Howard Hinnant template <class _Facet> 862d72b1e393e35d61917d6d0ce069482ab11e96d1Howard Hinnant _LIBCPP_INLINE_VISIBILITY locale(const locale&, _Facet*); 87bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant locale(const locale&, const locale&, category); 88bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 89c983454d300a3a1f11055c9dbfedf383a58f56ceHoward Hinnant ~locale(); 90bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 91c983454d300a3a1f11055c9dbfedf383a58f56ceHoward Hinnant const locale& operator=(const locale&) _NOEXCEPT; 92bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 93bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant template <class _Facet> locale combine(const locale&) const; 94bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 95bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant // locale operations: 96bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant string name() const; 97bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant bool operator==(const locale&) const; 98bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant bool operator!=(const locale& __y) const {return !(*this == __y);} 99bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant template <class _CharT, class _Traits, class _Allocator> 100bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant bool operator()(const basic_string<_CharT, _Traits, _Allocator>&, 101bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const basic_string<_CharT, _Traits, _Allocator>&) const; 102bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 103bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant // global locale objects: 104bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static locale global(const locale&); 105bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static const locale& classic(); 106bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 107bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantprivate: 108bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant class __imp; 109bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __imp* __locale_; 110bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 111bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant void __install_ctor(const locale&, facet*, long); 112bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static locale& __global(); 113bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant bool has_facet(id&) const; 114bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const facet* use_facet(id&) const; 115bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 116c983454d300a3a1f11055c9dbfedf383a58f56ceHoward Hinnant template <class _Facet> friend bool has_facet(const locale&) _NOEXCEPT; 117bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant template <class _Facet> friend const _Facet& use_facet(const locale&); 118bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}; 119bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 12083eade6abb414e0e814977921bcb6e46853cae03Howard Hinnantclass _LIBCPP_TYPE_VIS locale::facet 121bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant : public __shared_count 122bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 123bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantprotected: 124b0be42b2ce0dbde30fb64a96586411f35d2b1aedHoward Hinnant _LIBCPP_INLINE_VISIBILITY 125bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant explicit facet(size_t __refs = 0) 126bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant : __shared_count(static_cast<long>(__refs)-1) {} 127bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 128bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual ~facet(); 129bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 130bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// facet(const facet&) = delete; // effectively done in __shared_count 131bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// void operator=(const facet&) = delete; 132bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantprivate: 1331694d23e23d41c4037111d96324c0c16c744c09dHoward Hinnant virtual void __on_zero_shared() _NOEXCEPT; 134bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}; 135bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 13683eade6abb414e0e814977921bcb6e46853cae03Howard Hinnantclass _LIBCPP_TYPE_VIS locale::id 137bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 138bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant once_flag __flag_; 139bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant int32_t __id_; 140324bb03bb94f67ae7f9092810e4e4f6bd8bf506eHoward Hinnant 141bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static int32_t __next_id; 142bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantpublic: 143f3d62ea57ff9ac61c5fd9860713d2d0f781f9e12Howard Hinnant _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR id() :__id_(0) {} 144bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantprivate: 145bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant void __init(); 146bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant void operator=(const id&); // = delete; 147bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant id(const id&); // = delete; 148bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantpublic: // only needed for tests 149bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long __get(); 150bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 151bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant friend class locale; 152bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant friend class locale::__imp; 153bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}; 154bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 155bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <class _Facet> 156bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantinline _LIBCPP_INLINE_VISIBILITY 157bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantlocale::locale(const locale& __other, _Facet* __f) 158bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 159bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __install_ctor(__other, __f, __f ? __f->id.__get() : 0); 160bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 161bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 162bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <class _Facet> 163bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantlocale 164bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantlocale::combine(const locale& __other) const 165bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 166d444470d6cd1cad554139c4ba7f3c4f3fe921a5dHoward Hinnant#ifndef _LIBCPP_NO_EXCEPTIONS 1670949eedbd621bc1611266fb180d9a356ee1eaf9fHoward Hinnant if (!_VSTD::has_facet<_Facet>(__other)) 168bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant throw runtime_error("locale::combine: locale missing facet"); 169324bb03bb94f67ae7f9092810e4e4f6bd8bf506eHoward Hinnant#endif // _LIBCPP_NO_EXCEPTIONS 1700949eedbd621bc1611266fb180d9a356ee1eaf9fHoward Hinnant return locale(*this, &const_cast<_Facet&>(_VSTD::use_facet<_Facet>(__other))); 171bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 172bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 173bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <class _Facet> 174bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantinline _LIBCPP_INLINE_VISIBILITY 175bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantbool 176c983454d300a3a1f11055c9dbfedf383a58f56ceHoward Hinnanthas_facet(const locale& __l) _NOEXCEPT 177bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 178bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return __l.has_facet(_Facet::id); 179bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 180bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 181bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <class _Facet> 182bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantinline _LIBCPP_INLINE_VISIBILITY 183bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantconst _Facet& 184bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantuse_facet(const locale& __l) 185bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 186bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return static_cast<const _Facet&>(*__l.use_facet(_Facet::id)); 187bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 188bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 189bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// template <class _CharT> class collate; 190bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 191bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <class _CharT> 1920f678bd69ef6428e6c75ae1b43fcf1543df63cdaHoward Hinnantclass _LIBCPP_TYPE_VIS_ONLY collate 193bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant : public locale::facet 194bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 195bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantpublic: 196bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef _CharT char_type; 197bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef basic_string<char_type> string_type; 198bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 199b0be42b2ce0dbde30fb64a96586411f35d2b1aedHoward Hinnant _LIBCPP_INLINE_VISIBILITY 200bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant explicit collate(size_t __refs = 0) 201bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant : locale::facet(__refs) {} 202bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 203b0be42b2ce0dbde30fb64a96586411f35d2b1aedHoward Hinnant _LIBCPP_INLINE_VISIBILITY 204bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant int compare(const char_type* __lo1, const char_type* __hi1, 205bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const char_type* __lo2, const char_type* __hi2) const 206bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 207bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_compare(__lo1, __hi1, __lo2, __hi2); 208bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 209bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 210b0be42b2ce0dbde30fb64a96586411f35d2b1aedHoward Hinnant _LIBCPP_INLINE_VISIBILITY 211bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant string_type transform(const char_type* __lo, const char_type* __hi) const 212bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 213bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_transform(__lo, __hi); 214bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 215bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 216b0be42b2ce0dbde30fb64a96586411f35d2b1aedHoward Hinnant _LIBCPP_INLINE_VISIBILITY 217bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant long hash(const char_type* __lo, const char_type* __hi) const 218bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 219bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_hash(__lo, __hi); 220bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 221bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 222bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static locale::id id; 223bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 224bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantprotected: 225bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ~collate(); 226bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual int do_compare(const char_type* __lo1, const char_type* __hi1, 227bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const char_type* __lo2, const char_type* __hi2) const; 228bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual string_type do_transform(const char_type* __lo, const char_type* __hi) const 229bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant {return string_type(__lo, __hi);} 230bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual long do_hash(const char_type* __lo, const char_type* __hi) const; 231bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}; 232bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 233bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <class _CharT> locale::id collate<_CharT>::id; 234bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 235bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <class _CharT> 236bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantcollate<_CharT>::~collate() 237bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 238bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 239bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 240bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <class _CharT> 241bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantint 242bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantcollate<_CharT>::do_compare(const char_type* __lo1, const char_type* __hi1, 243bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const char_type* __lo2, const char_type* __hi2) const 244bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 245bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant for (; __lo2 != __hi2; ++__lo1, ++__lo2) 246bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 247bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant if (__lo1 == __hi1 || *__lo1 < *__lo2) 248bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return -1; 249bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant if (*__lo2 < *__lo1) 250bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return 1; 251bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 252bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return __lo1 != __hi1; 253bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 254bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 255bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <class _CharT> 256bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantlong 25711624459ef27e06ef2d8e71ec2d35bdd334dbbd9Howard Hinnantcollate<_CharT>::do_hash(const char_type* __lo, const char_type* __hi) const 258bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 25911624459ef27e06ef2d8e71ec2d35bdd334dbbd9Howard Hinnant size_t __h = 0; 26011624459ef27e06ef2d8e71ec2d35bdd334dbbd9Howard Hinnant const size_t __sr = __CHAR_BIT__ * sizeof(size_t) - 8; 26111624459ef27e06ef2d8e71ec2d35bdd334dbbd9Howard Hinnant const size_t __mask = size_t(0xF) << (__sr + 4); 26211624459ef27e06ef2d8e71ec2d35bdd334dbbd9Howard Hinnant for(const char_type* __p = __lo; __p != __hi; ++__p) 263bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 264ec3773c2dadbeadfc5def927116c2ee9d9c53066Howard Hinnant __h = (__h << 4) + static_cast<size_t>(*__p); 26511624459ef27e06ef2d8e71ec2d35bdd334dbbd9Howard Hinnant size_t __g = __h & __mask; 26611624459ef27e06ef2d8e71ec2d35bdd334dbbd9Howard Hinnant __h ^= __g | (__g >> __sr); 267bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 26811624459ef27e06ef2d8e71ec2d35bdd334dbbd9Howard Hinnant return static_cast<long>(__h); 269bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 270bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 271499cea12bb2b1c440f28274227d9fd98cd1c609eHoward Hinnant_LIBCPP_EXTERN_TEMPLATE2(class _LIBCPP_TYPE_VIS collate<char>) 272499cea12bb2b1c440f28274227d9fd98cd1c609eHoward Hinnant_LIBCPP_EXTERN_TEMPLATE2(class _LIBCPP_TYPE_VIS collate<wchar_t>) 273bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 274bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// template <class CharT> class collate_byname; 275bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 2760f678bd69ef6428e6c75ae1b43fcf1543df63cdaHoward Hinnanttemplate <class _CharT> class _LIBCPP_TYPE_VIS_ONLY collate_byname; 277bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 278bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <> 27983eade6abb414e0e814977921bcb6e46853cae03Howard Hinnantclass _LIBCPP_TYPE_VIS collate_byname<char> 280bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant : public collate<char> 281bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 282bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant locale_t __l; 283bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantpublic: 284bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef char char_type; 285bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef basic_string<char_type> string_type; 286bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 287bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant explicit collate_byname(const char* __n, size_t __refs = 0); 288bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant explicit collate_byname(const string& __n, size_t __refs = 0); 289bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 290bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantprotected: 291bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ~collate_byname(); 292bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual int do_compare(const char_type* __lo1, const char_type* __hi1, 293bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const char_type* __lo2, const char_type* __hi2) const; 294bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual string_type do_transform(const char_type* __lo, const char_type* __hi) const; 295bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}; 296bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 297bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <> 29883eade6abb414e0e814977921bcb6e46853cae03Howard Hinnantclass _LIBCPP_TYPE_VIS collate_byname<wchar_t> 299bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant : public collate<wchar_t> 300bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 301bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant locale_t __l; 302bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantpublic: 303bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef wchar_t char_type; 304bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef basic_string<char_type> string_type; 305bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 306bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant explicit collate_byname(const char* __n, size_t __refs = 0); 307bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant explicit collate_byname(const string& __n, size_t __refs = 0); 308bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 309bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantprotected: 310bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ~collate_byname(); 311bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 312bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual int do_compare(const char_type* __lo1, const char_type* __hi1, 313bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const char_type* __lo2, const char_type* __hi2) const; 314bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual string_type do_transform(const char_type* __lo, const char_type* __hi) const; 315bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}; 316bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 317bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <class _CharT, class _Traits, class _Allocator> 318bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantbool 319bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantlocale::operator()(const basic_string<_CharT, _Traits, _Allocator>& __x, 320bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const basic_string<_CharT, _Traits, _Allocator>& __y) const 321bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 3220949eedbd621bc1611266fb180d9a356ee1eaf9fHoward Hinnant return _VSTD::use_facet<_VSTD::collate<_CharT> >(*this).compare( 323bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __x.data(), __x.data() + __x.size(), 324bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __y.data(), __y.data() + __y.size()) < 0; 325bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 326bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 327bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// template <class charT> class ctype 328bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 32983eade6abb414e0e814977921bcb6e46853cae03Howard Hinnantclass _LIBCPP_TYPE_VIS ctype_base 330b0be42b2ce0dbde30fb64a96586411f35d2b1aedHoward Hinnant{ 331bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantpublic: 33253e27639669f8f05c77ea4ef60063667d31dd674Marshall Clow#ifdef __GLIBC__ 33362a6ac33a217b0e5a4c42367c6b72e51497246aeSean Hunt typedef unsigned short mask; 334c512df1950baf9466843b2943855356c031fec08David Chisnall static const mask space = _ISspace; 335c512df1950baf9466843b2943855356c031fec08David Chisnall static const mask print = _ISprint; 336c512df1950baf9466843b2943855356c031fec08David Chisnall static const mask cntrl = _IScntrl; 337c512df1950baf9466843b2943855356c031fec08David Chisnall static const mask upper = _ISupper; 338c512df1950baf9466843b2943855356c031fec08David Chisnall static const mask lower = _ISlower; 339c512df1950baf9466843b2943855356c031fec08David Chisnall static const mask alpha = _ISalpha; 340c512df1950baf9466843b2943855356c031fec08David Chisnall static const mask digit = _ISdigit; 341c512df1950baf9466843b2943855356c031fec08David Chisnall static const mask punct = _ISpunct; 342c512df1950baf9466843b2943855356c031fec08David Chisnall static const mask xdigit = _ISxdigit; 343c512df1950baf9466843b2943855356c031fec08David Chisnall static const mask blank = _ISblank; 344a22d2addb1287a7642bfcb211ae2cb21890d1cbdMarshall Clow#elif defined(_WIN32) 3453c466fc631a2a474d84ad6c29770a2cbdf40bf1bHoward Hinnant typedef unsigned short mask; 34692a07003b2ce449b22709fbd9b4f1e49b3a2fd3eHoward Hinnant static const mask space = _SPACE; 34792a07003b2ce449b22709fbd9b4f1e49b3a2fd3eHoward Hinnant static const mask print = _BLANK|_PUNCT|_ALPHA|_DIGIT; 34892a07003b2ce449b22709fbd9b4f1e49b3a2fd3eHoward Hinnant static const mask cntrl = _CONTROL; 34992a07003b2ce449b22709fbd9b4f1e49b3a2fd3eHoward Hinnant static const mask upper = _UPPER; 35092a07003b2ce449b22709fbd9b4f1e49b3a2fd3eHoward Hinnant static const mask lower = _LOWER; 35192a07003b2ce449b22709fbd9b4f1e49b3a2fd3eHoward Hinnant static const mask alpha = _ALPHA; 35292a07003b2ce449b22709fbd9b4f1e49b3a2fd3eHoward Hinnant static const mask digit = _DIGIT; 35392a07003b2ce449b22709fbd9b4f1e49b3a2fd3eHoward Hinnant static const mask punct = _PUNCT; 35492a07003b2ce449b22709fbd9b4f1e49b3a2fd3eHoward Hinnant static const mask xdigit = _HEX; 35592a07003b2ce449b22709fbd9b4f1e49b3a2fd3eHoward Hinnant static const mask blank = _BLANK; 356fe851e184372195a106fddfcc81b55b363c6a75bDan Albert#elif defined(__APPLE__) || defined(__FreeBSD__) || defined(__EMSCRIPTEN__) || defined(__NetBSD__) 3575cb52824fc2a0caf233311e91d9a2a53368f04adDan Albert# ifdef __APPLE__ 358bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef __uint32_t mask; 3595cb52824fc2a0caf233311e91d9a2a53368f04adDan Albert# elif defined(__FreeBSD__) 360c512df1950baf9466843b2943855356c031fec08David Chisnall typedef unsigned long mask; 3615cb52824fc2a0caf233311e91d9a2a53368f04adDan Albert# elif defined(__EMSCRIPTEN__) || defined(__NetBSD__) 362fc2f021bdd3fd69ff62bfc6ceb5c5264afd4ee7dHoward Hinnant typedef unsigned short mask; 3635cb52824fc2a0caf233311e91d9a2a53368f04adDan Albert# endif 364bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static const mask space = _CTYPE_S; 365bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static const mask print = _CTYPE_R; 366bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static const mask cntrl = _CTYPE_C; 367bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static const mask upper = _CTYPE_U; 368bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static const mask lower = _CTYPE_L; 369bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static const mask alpha = _CTYPE_A; 370bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static const mask digit = _CTYPE_D; 371bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static const mask punct = _CTYPE_P; 372bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static const mask xdigit = _CTYPE_X; 373d1ab521199792d5b811d4aa779fc04042e95eb3aDan Albert 374a71a9526340325a63cfee83be43be30af25a802cJoerg Sonnenberger# if defined(__NetBSD__) 375a71a9526340325a63cfee83be43be30af25a802cJoerg Sonnenberger static const mask blank = _CTYPE_BL; 376a71a9526340325a63cfee83be43be30af25a802cJoerg Sonnenberger# else 377bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static const mask blank = _CTYPE_B; 378a71a9526340325a63cfee83be43be30af25a802cJoerg Sonnenberger# endif 379cb0e6b65a842b75ecff6734a6250e73483637705Howard Hinnant#elif defined(__sun__) || defined(_AIX) 380997e4541395abd2db274c3bda04beaf5085e746fDavid Chisnall typedef unsigned int mask; 381997e4541395abd2db274c3bda04beaf5085e746fDavid Chisnall static const mask space = _ISSPACE; 382997e4541395abd2db274c3bda04beaf5085e746fDavid Chisnall static const mask print = _ISPRINT; 383997e4541395abd2db274c3bda04beaf5085e746fDavid Chisnall static const mask cntrl = _ISCNTRL; 384997e4541395abd2db274c3bda04beaf5085e746fDavid Chisnall static const mask upper = _ISUPPER; 385997e4541395abd2db274c3bda04beaf5085e746fDavid Chisnall static const mask lower = _ISLOWER; 386997e4541395abd2db274c3bda04beaf5085e746fDavid Chisnall static const mask alpha = _ISALPHA; 387997e4541395abd2db274c3bda04beaf5085e746fDavid Chisnall static const mask digit = _ISDIGIT; 388997e4541395abd2db274c3bda04beaf5085e746fDavid Chisnall static const mask punct = _ISPUNCT; 389997e4541395abd2db274c3bda04beaf5085e746fDavid Chisnall static const mask xdigit = _ISXDIGIT; 390997e4541395abd2db274c3bda04beaf5085e746fDavid Chisnall static const mask blank = _ISBLANK; 3915cb52824fc2a0caf233311e91d9a2a53368f04adDan Albert#elif defined(_NEWLIB_VERSION) 3925cb52824fc2a0caf233311e91d9a2a53368f04adDan Albert // Same type as Newlib's _ctype_ array in newlib/libc/include/ctype.h. 3935cb52824fc2a0caf233311e91d9a2a53368f04adDan Albert typedef char mask; 3945cb52824fc2a0caf233311e91d9a2a53368f04adDan Albert static const mask space = _S; 3955cb52824fc2a0caf233311e91d9a2a53368f04adDan Albert static const mask print = _P | _U | _L | _N | _B; 3965cb52824fc2a0caf233311e91d9a2a53368f04adDan Albert static const mask cntrl = _C; 3975cb52824fc2a0caf233311e91d9a2a53368f04adDan Albert static const mask upper = _U; 3985cb52824fc2a0caf233311e91d9a2a53368f04adDan Albert static const mask lower = _L; 3995cb52824fc2a0caf233311e91d9a2a53368f04adDan Albert static const mask alpha = _U | _L; 4005cb52824fc2a0caf233311e91d9a2a53368f04adDan Albert static const mask digit = _N; 4015cb52824fc2a0caf233311e91d9a2a53368f04adDan Albert static const mask punct = _P; 4025cb52824fc2a0caf233311e91d9a2a53368f04adDan Albert static const mask xdigit = _X | _N; 4035cb52824fc2a0caf233311e91d9a2a53368f04adDan Albert static const mask blank = _B; 4045cb52824fc2a0caf233311e91d9a2a53368f04adDan Albert#else 40511624459ef27e06ef2d8e71ec2d35bdd334dbbd9Howard Hinnant typedef unsigned long mask; 40611624459ef27e06ef2d8e71ec2d35bdd334dbbd9Howard Hinnant static const mask space = 1<<0; 40711624459ef27e06ef2d8e71ec2d35bdd334dbbd9Howard Hinnant static const mask print = 1<<1; 40811624459ef27e06ef2d8e71ec2d35bdd334dbbd9Howard Hinnant static const mask cntrl = 1<<2; 40911624459ef27e06ef2d8e71ec2d35bdd334dbbd9Howard Hinnant static const mask upper = 1<<3; 41011624459ef27e06ef2d8e71ec2d35bdd334dbbd9Howard Hinnant static const mask lower = 1<<4; 41111624459ef27e06ef2d8e71ec2d35bdd334dbbd9Howard Hinnant static const mask alpha = 1<<5; 41211624459ef27e06ef2d8e71ec2d35bdd334dbbd9Howard Hinnant static const mask digit = 1<<6; 41311624459ef27e06ef2d8e71ec2d35bdd334dbbd9Howard Hinnant static const mask punct = 1<<7; 41411624459ef27e06ef2d8e71ec2d35bdd334dbbd9Howard Hinnant static const mask xdigit = 1<<8; 41511624459ef27e06ef2d8e71ec2d35bdd334dbbd9Howard Hinnant static const mask blank = 1<<9; 4165cb52824fc2a0caf233311e91d9a2a53368f04adDan Albert#endif 417bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static const mask alnum = alpha | digit; 418bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static const mask graph = alnum | punct; 419bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 420bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE ctype_base() {} 421bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}; 422bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 4230f678bd69ef6428e6c75ae1b43fcf1543df63cdaHoward Hinnanttemplate <class _CharT> class _LIBCPP_TYPE_VIS_ONLY ctype; 424bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 425bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <> 42683eade6abb414e0e814977921bcb6e46853cae03Howard Hinnantclass _LIBCPP_TYPE_VIS ctype<wchar_t> 427bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant : public locale::facet, 428bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant public ctype_base 429bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 430bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantpublic: 431bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef wchar_t char_type; 432324bb03bb94f67ae7f9092810e4e4f6bd8bf506eHoward Hinnant 433bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 434bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant explicit ctype(size_t __refs = 0) 435bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant : locale::facet(__refs) {} 436bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 437bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 438bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant bool is(mask __m, char_type __c) const 439bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 440bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_is(__m, __c); 441bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 442bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 443bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 444bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const char_type* is(const char_type* __low, const char_type* __high, mask* __vec) const 445bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 446bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_is(__low, __high, __vec); 447bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 448bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 449bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 450bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const char_type* scan_is(mask __m, const char_type* __low, const char_type* __high) const 451bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 452bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_scan_is(__m, __low, __high); 453bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 454bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 455bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 456bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const char_type* scan_not(mask __m, const char_type* __low, const char_type* __high) const 457bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 458bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_scan_not(__m, __low, __high); 459bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 460bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 461bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 462bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char_type toupper(char_type __c) const 463bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 464bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_toupper(__c); 465bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 466bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 467bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 468bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const char_type* toupper(char_type* __low, const char_type* __high) const 469bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 470bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_toupper(__low, __high); 471bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 472bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 473bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 474bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char_type tolower(char_type __c) const 475bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 476bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_tolower(__c); 477bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 478bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 479bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 480bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const char_type* tolower(char_type* __low, const char_type* __high) const 481bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 482bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_tolower(__low, __high); 483bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 484bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 485bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 486bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char_type widen(char __c) const 487bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 488bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_widen(__c); 489bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 490bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 491bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 492bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const char* widen(const char* __low, const char* __high, char_type* __to) const 493bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 494bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_widen(__low, __high, __to); 495bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 496bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 497bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 498bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char narrow(char_type __c, char __dfault) const 499bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 500bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_narrow(__c, __dfault); 501bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 502bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 503bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 504bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const char_type* narrow(const char_type* __low, const char_type* __high, char __dfault, char* __to) const 505bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 506bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_narrow(__low, __high, __dfault, __to); 507bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 508bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 509bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static locale::id id; 510bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 511bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantprotected: 512bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ~ctype(); 513bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual bool do_is(mask __m, char_type __c) const; 514bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual const char_type* do_is(const char_type* __low, const char_type* __high, mask* __vec) const; 515bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual const char_type* do_scan_is(mask __m, const char_type* __low, const char_type* __high) const; 516bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual const char_type* do_scan_not(mask __m, const char_type* __low, const char_type* __high) const; 517bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual char_type do_toupper(char_type) const; 518bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual const char_type* do_toupper(char_type* __low, const char_type* __high) const; 519bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual char_type do_tolower(char_type) const; 520bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual const char_type* do_tolower(char_type* __low, const char_type* __high) const; 521bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual char_type do_widen(char) const; 522bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual const char* do_widen(const char* __low, const char* __high, char_type* __dest) const; 523bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual char do_narrow(char_type, char __dfault) const; 524bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual const char_type* do_narrow(const char_type* __low, const char_type* __high, char __dfault, char* __dest) const; 525bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}; 526bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 527bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <> 52883eade6abb414e0e814977921bcb6e46853cae03Howard Hinnantclass _LIBCPP_TYPE_VIS ctype<char> 529bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant : public locale::facet, public ctype_base 530bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 531bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const mask* __tab_; 532bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant bool __del_; 533bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantpublic: 534bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef char char_type; 535bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 536bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant explicit ctype(const mask* __tab = 0, bool __del = false, size_t __refs = 0); 537bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 538bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 539bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant bool is(mask __m, char_type __c) const 540bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 5418a43fca8edade4efb453bad10243841738e6dfbaMarshall Clow return isascii(__c) ? (__tab_[static_cast<int>(__c)] & __m) !=0 : false; 542bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 543bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 544bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 545bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const char_type* is(const char_type* __low, const char_type* __high, mask* __vec) const 546bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 547bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant for (; __low != __high; ++__low, ++__vec) 548ec3773c2dadbeadfc5def927116c2ee9d9c53066Howard Hinnant *__vec = isascii(*__low) ? __tab_[static_cast<int>(*__low)] : 0; 549bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return __low; 550bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 551bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 552bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 553bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const char_type* scan_is (mask __m, const char_type* __low, const char_type* __high) const 554bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 555bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant for (; __low != __high; ++__low) 556ec3773c2dadbeadfc5def927116c2ee9d9c53066Howard Hinnant if (isascii(*__low) && (__tab_[static_cast<int>(*__low)] & __m)) 557bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant break; 558bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return __low; 559bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 560bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 561bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 562bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const char_type* scan_not(mask __m, const char_type* __low, const char_type* __high) const 563bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 564bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant for (; __low != __high; ++__low) 565ec3773c2dadbeadfc5def927116c2ee9d9c53066Howard Hinnant if (!(isascii(*__low) && (__tab_[static_cast<int>(*__low)] & __m))) 566bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant break; 567bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return __low; 568bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 569bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 570bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 571bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char_type toupper(char_type __c) const 572bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 573bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_toupper(__c); 574bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 575bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 576bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 577bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const char_type* toupper(char_type* __low, const char_type* __high) const 578bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 579bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_toupper(__low, __high); 580bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 581bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 582bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 583bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char_type tolower(char_type __c) const 584bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 585bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_tolower(__c); 586bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 587bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 588bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 589bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const char_type* tolower(char_type* __low, const char_type* __high) const 590bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 591bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_tolower(__low, __high); 592bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 593bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 594bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 595bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char_type widen(char __c) const 596bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 597bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_widen(__c); 598bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 599bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 600bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 601bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const char* widen(const char* __low, const char* __high, char_type* __to) const 602bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 603bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_widen(__low, __high, __to); 604bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 605bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 606bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 607bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char narrow(char_type __c, char __dfault) const 608bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 609bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_narrow(__c, __dfault); 610bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 611bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 612bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 613bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const char* narrow(const char_type* __low, const char_type* __high, char __dfault, char* __to) const 614bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 615bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_narrow(__low, __high, __dfault, __to); 616bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 617bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 618bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static locale::id id; 619bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 620adff4895b2746f30b271bc219713e7ded5ae9677Howard Hinnant#ifdef _CACHED_RUNES 621bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static const size_t table_size = _CACHED_RUNES; 622adff4895b2746f30b271bc219713e7ded5ae9677Howard Hinnant#else 623adff4895b2746f30b271bc219713e7ded5ae9677Howard Hinnant static const size_t table_size = 256; // FIXME: Don't hardcode this. 624adff4895b2746f30b271bc219713e7ded5ae9677Howard Hinnant#endif 625c983454d300a3a1f11055c9dbfedf383a58f56ceHoward Hinnant _LIBCPP_ALWAYS_INLINE const mask* table() const _NOEXCEPT {return __tab_;} 626c983454d300a3a1f11055c9dbfedf383a58f56ceHoward Hinnant static const mask* classic_table() _NOEXCEPT; 6272ccffefaffc4558adcfa64bec7dc71ade2235937Marshall Clow#if defined(__GLIBC__) || defined(__EMSCRIPTEN__) 62862a6ac33a217b0e5a4c42367c6b72e51497246aeSean Hunt static const int* __classic_upper_table() _NOEXCEPT; 62962a6ac33a217b0e5a4c42367c6b72e51497246aeSean Hunt static const int* __classic_lower_table() _NOEXCEPT; 630e59f724f79c5388d6b0a7794fd6d610783bec62dSean Hunt#endif 631a71a9526340325a63cfee83be43be30af25a802cJoerg Sonnenberger#if defined(__NetBSD__) 632a71a9526340325a63cfee83be43be30af25a802cJoerg Sonnenberger static const short* __classic_upper_table() _NOEXCEPT; 633a71a9526340325a63cfee83be43be30af25a802cJoerg Sonnenberger static const short* __classic_lower_table() _NOEXCEPT; 634a71a9526340325a63cfee83be43be30af25a802cJoerg Sonnenberger#endif 635bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 636bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantprotected: 637bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ~ctype(); 638bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual char_type do_toupper(char_type __c) 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 __c) const; 641bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual const char_type* do_tolower(char_type* __low, const char_type* __high) const; 642bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual char_type do_widen(char __c) const; 643bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual const char* do_widen(const char* __low, const char* __high, char_type* __to) const; 644bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual char do_narrow(char_type __c, char __dfault) const; 645bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual const char* do_narrow(const char_type* __low, const char_type* __high, char __dfault, char* __to) const; 646bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}; 647bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 648bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// template <class CharT> class ctype_byname; 649bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 6500f678bd69ef6428e6c75ae1b43fcf1543df63cdaHoward Hinnanttemplate <class _CharT> class _LIBCPP_TYPE_VIS_ONLY ctype_byname; 651bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 652bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <> 65383eade6abb414e0e814977921bcb6e46853cae03Howard Hinnantclass _LIBCPP_TYPE_VIS ctype_byname<char> 654bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant : public ctype<char> 655bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 656bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant locale_t __l; 657bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 658bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantpublic: 659bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant explicit ctype_byname(const char*, size_t = 0); 660bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant explicit ctype_byname(const string&, size_t = 0); 661bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 662bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantprotected: 663bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ~ctype_byname(); 664bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual char_type do_toupper(char_type) const; 665bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual const char_type* do_toupper(char_type* __low, const char_type* __high) const; 666bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual char_type do_tolower(char_type) const; 667bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual const char_type* do_tolower(char_type* __low, const char_type* __high) const; 668bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}; 669bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 670bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <> 67183eade6abb414e0e814977921bcb6e46853cae03Howard Hinnantclass _LIBCPP_TYPE_VIS ctype_byname<wchar_t> 672bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant : public ctype<wchar_t> 673bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 674bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant locale_t __l; 675bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 676bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantpublic: 677bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant explicit ctype_byname(const char*, size_t = 0); 678bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant explicit ctype_byname(const string&, size_t = 0); 679bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 680bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantprotected: 681bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ~ctype_byname(); 682bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual bool do_is(mask __m, char_type __c) const; 683bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual const char_type* do_is(const char_type* __low, const char_type* __high, mask* __vec) const; 684bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual const char_type* do_scan_is(mask __m, const char_type* __low, const char_type* __high) const; 685bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual const char_type* do_scan_not(mask __m, const char_type* __low, const char_type* __high) const; 686bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual char_type do_toupper(char_type) const; 687bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual const char_type* do_toupper(char_type* __low, const char_type* __high) const; 688bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual char_type do_tolower(char_type) const; 689bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual const char_type* do_tolower(char_type* __low, const char_type* __high) const; 690bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual char_type do_widen(char) const; 691bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual const char* do_widen(const char* __low, const char* __high, char_type* __dest) const; 692bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual char do_narrow(char_type, char __dfault) const; 693bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual const char_type* do_narrow(const char_type* __low, const char_type* __high, char __dfault, char* __dest) const; 694bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}; 695bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 696bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <class _CharT> 697bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantinline _LIBCPP_INLINE_VISIBILITY 698bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantbool 699bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantisspace(_CharT __c, const locale& __loc) 700bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 701bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return use_facet<ctype<_CharT> >(__loc).is(ctype_base::space, __c); 702bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 703bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 704bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <class _CharT> 705bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantinline _LIBCPP_INLINE_VISIBILITY 706bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantbool 707bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantisprint(_CharT __c, const locale& __loc) 708bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 709bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return use_facet<ctype<_CharT> >(__loc).is(ctype_base::print, __c); 710bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 711bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 712bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <class _CharT> 713bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantinline _LIBCPP_INLINE_VISIBILITY 714bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantbool 715bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantiscntrl(_CharT __c, const locale& __loc) 716bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 717bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return use_facet<ctype<_CharT> >(__loc).is(ctype_base::cntrl, __c); 718bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 719bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 720bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <class _CharT> 721bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantinline _LIBCPP_INLINE_VISIBILITY 722bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantbool 723bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantisupper(_CharT __c, const locale& __loc) 724bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 725bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return use_facet<ctype<_CharT> >(__loc).is(ctype_base::upper, __c); 726bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 727bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 728bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <class _CharT> 729bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantinline _LIBCPP_INLINE_VISIBILITY 730bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantbool 731bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantislower(_CharT __c, const locale& __loc) 732bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 733bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return use_facet<ctype<_CharT> >(__loc).is(ctype_base::lower, __c); 734bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 735bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 736bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <class _CharT> 737bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantinline _LIBCPP_INLINE_VISIBILITY 738bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantbool 739bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantisalpha(_CharT __c, const locale& __loc) 740bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 741bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return use_facet<ctype<_CharT> >(__loc).is(ctype_base::alpha, __c); 742bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 743bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 744bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <class _CharT> 745bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantinline _LIBCPP_INLINE_VISIBILITY 746bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantbool 747bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantisdigit(_CharT __c, const locale& __loc) 748bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 749bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return use_facet<ctype<_CharT> >(__loc).is(ctype_base::digit, __c); 750bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 751bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 752bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <class _CharT> 753bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantinline _LIBCPP_INLINE_VISIBILITY 754bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantbool 755bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantispunct(_CharT __c, const locale& __loc) 756bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 757bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return use_facet<ctype<_CharT> >(__loc).is(ctype_base::punct, __c); 758bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 759bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 760bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <class _CharT> 761bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantinline _LIBCPP_INLINE_VISIBILITY 762bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantbool 763bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantisxdigit(_CharT __c, const locale& __loc) 764bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 765bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return use_facet<ctype<_CharT> >(__loc).is(ctype_base::xdigit, __c); 766bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 767bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 768bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <class _CharT> 769bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantinline _LIBCPP_INLINE_VISIBILITY 770bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantbool 771bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantisalnum(_CharT __c, const locale& __loc) 772bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 773bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return use_facet<ctype<_CharT> >(__loc).is(ctype_base::alnum, __c); 774bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 775bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 776bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <class _CharT> 777bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantinline _LIBCPP_INLINE_VISIBILITY 778bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantbool 779bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantisgraph(_CharT __c, const locale& __loc) 780bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 781bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return use_facet<ctype<_CharT> >(__loc).is(ctype_base::graph, __c); 782bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 783bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 784bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <class _CharT> 785bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantinline _LIBCPP_INLINE_VISIBILITY 786bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant_CharT 787bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttoupper(_CharT __c, const locale& __loc) 788bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 789bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return use_facet<ctype<_CharT> >(__loc).toupper(__c); 790bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 791bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 792bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <class _CharT> 793bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantinline _LIBCPP_INLINE_VISIBILITY 794bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant_CharT 795bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttolower(_CharT __c, const locale& __loc) 796bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 797bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return use_facet<ctype<_CharT> >(__loc).tolower(__c); 798bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 799bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 800bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// codecvt_base 801bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 80283eade6abb414e0e814977921bcb6e46853cae03Howard Hinnantclass _LIBCPP_TYPE_VIS codecvt_base 803bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 804bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantpublic: 805bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE codecvt_base() {} 806bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant enum result {ok, partial, error, noconv}; 807bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}; 808bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 809bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// template <class internT, class externT, class stateT> class codecvt; 810bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 8110f678bd69ef6428e6c75ae1b43fcf1543df63cdaHoward Hinnanttemplate <class _InternT, class _ExternT, class _StateT> class _LIBCPP_TYPE_VIS_ONLY codecvt; 812bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 813bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// template <> class codecvt<char, char, mbstate_t> 814bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 815bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <> 81683eade6abb414e0e814977921bcb6e46853cae03Howard Hinnantclass _LIBCPP_TYPE_VIS codecvt<char, char, mbstate_t> 817bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant : public locale::facet, 818bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant public codecvt_base 819bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 820bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantpublic: 821bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef char intern_type; 822bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef char extern_type; 823bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef mbstate_t state_type; 824bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 825bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 826bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant explicit codecvt(size_t __refs = 0) 827bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant : locale::facet(__refs) {} 828bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 829bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 830bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant result out(state_type& __st, 831bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const intern_type* __frm, const intern_type* __frm_end, const intern_type*& __frm_nxt, 832bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const 833bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 834bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_out(__st, __frm, __frm_end, __frm_nxt, __to, __to_end, __to_nxt); 835bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 836bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 837bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 838bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant result unshift(state_type& __st, 839bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const 840bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 841bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_unshift(__st, __to, __to_end, __to_nxt); 842bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 843bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 844bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 845bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant result in(state_type& __st, 846bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const extern_type* __frm, const extern_type* __frm_end, const extern_type*& __frm_nxt, 847bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant intern_type* __to, intern_type* __to_end, intern_type*& __to_nxt) const 848bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 849bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_in(__st, __frm, __frm_end, __frm_nxt, __to, __to_end, __to_nxt); 850bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 851bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 852bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 853c983454d300a3a1f11055c9dbfedf383a58f56ceHoward Hinnant int encoding() const _NOEXCEPT 854bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 855bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_encoding(); 856bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 857bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 858bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 859c983454d300a3a1f11055c9dbfedf383a58f56ceHoward Hinnant bool always_noconv() const _NOEXCEPT 860bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 861bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_always_noconv(); 862bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 863bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 864bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 865bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant int length(state_type& __st, const extern_type* __frm, const extern_type* __end, size_t __mx) const 866bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 867bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_length(__st, __frm, __end, __mx); 868bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 869bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 870bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 871c983454d300a3a1f11055c9dbfedf383a58f56ceHoward Hinnant int max_length() const _NOEXCEPT 872bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 873bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_max_length(); 874bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 875bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 876bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static locale::id id; 877bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 878bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantprotected: 879bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 880bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant explicit codecvt(const char*, size_t __refs = 0) 881bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant : locale::facet(__refs) {} 882bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 883bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ~codecvt(); 884bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 885bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual result do_out(state_type& __st, 886bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const intern_type* __frm, const intern_type* __frm_end, const intern_type*& __frm_nxt, 887bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const; 888bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual result do_in(state_type& __st, 889bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const extern_type* __frm, const extern_type* __frm_end, const extern_type*& __frm_nxt, 890bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant intern_type* __to, intern_type* __to_end, intern_type*& __to_nxt) const; 891bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual result do_unshift(state_type& __st, 892bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const; 893c983454d300a3a1f11055c9dbfedf383a58f56ceHoward Hinnant virtual int do_encoding() const _NOEXCEPT; 894c983454d300a3a1f11055c9dbfedf383a58f56ceHoward Hinnant virtual bool do_always_noconv() const _NOEXCEPT; 895bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual int do_length(state_type& __st, const extern_type* __frm, const extern_type* __end, size_t __mx) const; 896c983454d300a3a1f11055c9dbfedf383a58f56ceHoward Hinnant virtual int do_max_length() const _NOEXCEPT; 897bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}; 898bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 899bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// template <> class codecvt<wchar_t, char, mbstate_t> 900bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 901bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <> 90283eade6abb414e0e814977921bcb6e46853cae03Howard Hinnantclass _LIBCPP_TYPE_VIS codecvt<wchar_t, char, mbstate_t> 903bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant : public locale::facet, 904bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant public codecvt_base 905bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 906bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant locale_t __l; 907bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantpublic: 908bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef wchar_t intern_type; 909bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef char extern_type; 910bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef mbstate_t state_type; 911bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 912bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant explicit codecvt(size_t __refs = 0); 913bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 914bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 915bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant result out(state_type& __st, 916bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const intern_type* __frm, const intern_type* __frm_end, const intern_type*& __frm_nxt, 917bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const 918bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 919bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_out(__st, __frm, __frm_end, __frm_nxt, __to, __to_end, __to_nxt); 920bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 921bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 922bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 923bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant result unshift(state_type& __st, 924bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const 925bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 926bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_unshift(__st, __to, __to_end, __to_nxt); 927bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 928bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 929bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 930bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant result in(state_type& __st, 931bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const extern_type* __frm, const extern_type* __frm_end, const extern_type*& __frm_nxt, 932bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant intern_type* __to, intern_type* __to_end, intern_type*& __to_nxt) const 933bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 934bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_in(__st, __frm, __frm_end, __frm_nxt, __to, __to_end, __to_nxt); 935bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 936bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 937bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 938c983454d300a3a1f11055c9dbfedf383a58f56ceHoward Hinnant int encoding() const _NOEXCEPT 939bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 940bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_encoding(); 941bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 942bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 943bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 944c983454d300a3a1f11055c9dbfedf383a58f56ceHoward Hinnant bool always_noconv() const _NOEXCEPT 945bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 946bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_always_noconv(); 947bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 948bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 949bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 950bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant int length(state_type& __st, const extern_type* __frm, const extern_type* __end, size_t __mx) const 951bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 952bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_length(__st, __frm, __end, __mx); 953bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 954bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 955bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 956c983454d300a3a1f11055c9dbfedf383a58f56ceHoward Hinnant int max_length() const _NOEXCEPT 957bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 958bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_max_length(); 959bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 960bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 961bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static locale::id id; 962bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 963bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantprotected: 964bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant explicit codecvt(const char*, size_t __refs = 0); 965bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 966bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ~codecvt(); 967bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 968bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual result do_out(state_type& __st, 969bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const intern_type* __frm, const intern_type* __frm_end, const intern_type*& __frm_nxt, 970bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const; 971bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual result do_in(state_type& __st, 972bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const extern_type* __frm, const extern_type* __frm_end, const extern_type*& __frm_nxt, 973bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant intern_type* __to, intern_type* __to_end, intern_type*& __to_nxt) const; 974bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual result do_unshift(state_type& __st, 975bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const; 976c983454d300a3a1f11055c9dbfedf383a58f56ceHoward Hinnant virtual int do_encoding() const _NOEXCEPT; 977c983454d300a3a1f11055c9dbfedf383a58f56ceHoward Hinnant virtual bool do_always_noconv() const _NOEXCEPT; 978bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual int do_length(state_type&, const extern_type* __frm, const extern_type* __end, size_t __mx) const; 979c983454d300a3a1f11055c9dbfedf383a58f56ceHoward Hinnant virtual int do_max_length() const _NOEXCEPT; 980bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}; 981bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 982bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// template <> class codecvt<char16_t, char, mbstate_t> 983bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 984bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <> 98583eade6abb414e0e814977921bcb6e46853cae03Howard Hinnantclass _LIBCPP_TYPE_VIS codecvt<char16_t, char, mbstate_t> 986bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant : public locale::facet, 987bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant public codecvt_base 988bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 989bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantpublic: 990bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef char16_t intern_type; 991bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef char extern_type; 992bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef mbstate_t state_type; 993bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 994bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 995bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant explicit codecvt(size_t __refs = 0) 996bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant : locale::facet(__refs) {} 997bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 998bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 999bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant result out(state_type& __st, 1000bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const intern_type* __frm, const intern_type* __frm_end, const intern_type*& __frm_nxt, 1001bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const 1002bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 1003bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_out(__st, __frm, __frm_end, __frm_nxt, __to, __to_end, __to_nxt); 1004bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 1005bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1006bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 1007bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant result unshift(state_type& __st, 1008bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const 1009bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 1010bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_unshift(__st, __to, __to_end, __to_nxt); 1011bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 1012bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1013bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 1014bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant result in(state_type& __st, 1015bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const extern_type* __frm, const extern_type* __frm_end, const extern_type*& __frm_nxt, 1016bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant intern_type* __to, intern_type* __to_end, intern_type*& __to_nxt) const 1017bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 1018bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_in(__st, __frm, __frm_end, __frm_nxt, __to, __to_end, __to_nxt); 1019bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 1020bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1021bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 1022c983454d300a3a1f11055c9dbfedf383a58f56ceHoward Hinnant int encoding() const _NOEXCEPT 1023bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 1024bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_encoding(); 1025bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 1026bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1027bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 1028c983454d300a3a1f11055c9dbfedf383a58f56ceHoward Hinnant bool always_noconv() const _NOEXCEPT 1029bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 1030bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_always_noconv(); 1031bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 1032bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1033bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 1034bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant int length(state_type& __st, const extern_type* __frm, const extern_type* __end, size_t __mx) const 1035bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 1036bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_length(__st, __frm, __end, __mx); 1037bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 1038bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1039bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 1040c983454d300a3a1f11055c9dbfedf383a58f56ceHoward Hinnant int max_length() const _NOEXCEPT 1041bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 1042bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_max_length(); 1043bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 1044bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1045bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static locale::id id; 1046bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1047bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantprotected: 1048bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 1049bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant explicit codecvt(const char*, size_t __refs = 0) 1050bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant : locale::facet(__refs) {} 1051bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1052bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ~codecvt(); 1053bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1054bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual result do_out(state_type& __st, 1055bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const intern_type* __frm, const intern_type* __frm_end, const intern_type*& __frm_nxt, 1056bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const; 1057bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual result do_in(state_type& __st, 1058bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const extern_type* __frm, const extern_type* __frm_end, const extern_type*& __frm_nxt, 1059bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant intern_type* __to, intern_type* __to_end, intern_type*& __to_nxt) const; 1060bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual result do_unshift(state_type& __st, 1061bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const; 1062c983454d300a3a1f11055c9dbfedf383a58f56ceHoward Hinnant virtual int do_encoding() const _NOEXCEPT; 1063c983454d300a3a1f11055c9dbfedf383a58f56ceHoward Hinnant virtual bool do_always_noconv() const _NOEXCEPT; 1064bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual int do_length(state_type&, const extern_type* __frm, const extern_type* __end, size_t __mx) const; 1065c983454d300a3a1f11055c9dbfedf383a58f56ceHoward Hinnant virtual int do_max_length() const _NOEXCEPT; 1066bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}; 1067bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1068bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// template <> class codecvt<char32_t, char, mbstate_t> 1069bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1070bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <> 107183eade6abb414e0e814977921bcb6e46853cae03Howard Hinnantclass _LIBCPP_TYPE_VIS codecvt<char32_t, char, mbstate_t> 1072bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant : public locale::facet, 1073bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant public codecvt_base 1074bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 1075bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantpublic: 1076bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef char32_t intern_type; 1077bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef char extern_type; 1078bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef mbstate_t state_type; 1079bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1080bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 1081bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant explicit codecvt(size_t __refs = 0) 1082bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant : locale::facet(__refs) {} 1083bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1084bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 1085bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant result out(state_type& __st, 1086bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const intern_type* __frm, const intern_type* __frm_end, const intern_type*& __frm_nxt, 1087bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const 1088bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 1089bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_out(__st, __frm, __frm_end, __frm_nxt, __to, __to_end, __to_nxt); 1090bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 1091bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1092bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 1093bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant result unshift(state_type& __st, 1094bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const 1095bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 1096bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_unshift(__st, __to, __to_end, __to_nxt); 1097bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 1098bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1099bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 1100bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant result in(state_type& __st, 1101bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const extern_type* __frm, const extern_type* __frm_end, const extern_type*& __frm_nxt, 1102bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant intern_type* __to, intern_type* __to_end, intern_type*& __to_nxt) const 1103bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 1104bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_in(__st, __frm, __frm_end, __frm_nxt, __to, __to_end, __to_nxt); 1105bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 1106bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1107bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 1108c983454d300a3a1f11055c9dbfedf383a58f56ceHoward Hinnant int encoding() const _NOEXCEPT 1109bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 1110bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_encoding(); 1111bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 1112bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1113bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 1114c983454d300a3a1f11055c9dbfedf383a58f56ceHoward Hinnant bool always_noconv() const _NOEXCEPT 1115bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 1116bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_always_noconv(); 1117bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 1118bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1119bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 1120bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant int length(state_type& __st, const extern_type* __frm, const extern_type* __end, size_t __mx) const 1121bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 1122bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_length(__st, __frm, __end, __mx); 1123bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 1124bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1125bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 1126c983454d300a3a1f11055c9dbfedf383a58f56ceHoward Hinnant int max_length() const _NOEXCEPT 1127bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 1128bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return do_max_length(); 1129bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 1130bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1131bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static locale::id id; 1132bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1133bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantprotected: 1134bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 1135bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant explicit codecvt(const char*, size_t __refs = 0) 1136bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant : locale::facet(__refs) {} 1137bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1138bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ~codecvt(); 1139bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1140bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual result do_out(state_type& __st, 1141bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const intern_type* __frm, const intern_type* __frm_end, const intern_type*& __frm_nxt, 1142bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const; 1143bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual result do_in(state_type& __st, 1144bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const extern_type* __frm, const extern_type* __frm_end, const extern_type*& __frm_nxt, 1145bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant intern_type* __to, intern_type* __to_end, intern_type*& __to_nxt) const; 1146bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual result do_unshift(state_type& __st, 1147bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const; 1148c983454d300a3a1f11055c9dbfedf383a58f56ceHoward Hinnant virtual int do_encoding() const _NOEXCEPT; 1149c983454d300a3a1f11055c9dbfedf383a58f56ceHoward Hinnant virtual bool do_always_noconv() const _NOEXCEPT; 1150bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual int do_length(state_type&, const extern_type* __frm, const extern_type* __end, size_t __mx) const; 1151c983454d300a3a1f11055c9dbfedf383a58f56ceHoward Hinnant virtual int do_max_length() const _NOEXCEPT; 1152bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}; 1153bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1154bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// template <class _InternT, class _ExternT, class _StateT> class codecvt_byname 1155bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1156bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <class _InternT, class _ExternT, class _StateT> 11570f678bd69ef6428e6c75ae1b43fcf1543df63cdaHoward Hinnantclass _LIBCPP_TYPE_VIS_ONLY codecvt_byname 1158bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant : public codecvt<_InternT, _ExternT, _StateT> 1159bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 1160bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantpublic: 1161b0be42b2ce0dbde30fb64a96586411f35d2b1aedHoward Hinnant _LIBCPP_ALWAYS_INLINE 1162bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant explicit codecvt_byname(const char* __nm, size_t __refs = 0) 1163bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant : codecvt<_InternT, _ExternT, _StateT>(__nm, __refs) {} 1164b0be42b2ce0dbde30fb64a96586411f35d2b1aedHoward Hinnant _LIBCPP_ALWAYS_INLINE 1165bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant explicit codecvt_byname(const string& __nm, size_t __refs = 0) 1166bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant : codecvt<_InternT, _ExternT, _StateT>(__nm.c_str(), __refs) {} 1167bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantprotected: 1168bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ~codecvt_byname(); 1169bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}; 1170bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1171bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <class _InternT, class _ExternT, class _StateT> 1172bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantcodecvt_byname<_InternT, _ExternT, _StateT>::~codecvt_byname() 1173bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 1174bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 1175bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1176499cea12bb2b1c440f28274227d9fd98cd1c609eHoward Hinnant_LIBCPP_EXTERN_TEMPLATE2(class _LIBCPP_TYPE_VIS codecvt_byname<char, char, mbstate_t>) 1177499cea12bb2b1c440f28274227d9fd98cd1c609eHoward Hinnant_LIBCPP_EXTERN_TEMPLATE2(class _LIBCPP_TYPE_VIS codecvt_byname<wchar_t, char, mbstate_t>) 1178499cea12bb2b1c440f28274227d9fd98cd1c609eHoward Hinnant_LIBCPP_EXTERN_TEMPLATE2(class _LIBCPP_TYPE_VIS codecvt_byname<char16_t, char, mbstate_t>) 1179499cea12bb2b1c440f28274227d9fd98cd1c609eHoward Hinnant_LIBCPP_EXTERN_TEMPLATE2(class _LIBCPP_TYPE_VIS codecvt_byname<char32_t, char, mbstate_t>) 1180bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 118183eade6abb414e0e814977921bcb6e46853cae03Howard Hinnant_LIBCPP_FUNC_VIS void __throw_runtime_error(const char*); 1182bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 11839996844df0f22a68a1af6d30c611be1f1ebf1486Howard Hinnanttemplate <size_t _Np> 1184bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantstruct __narrow_to_utf8 1185bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 1186bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant template <class _OutputIterator, class _CharT> 1187bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _OutputIterator 1188bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant operator()(_OutputIterator __s, const _CharT* __wb, const _CharT* __we) const; 1189bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}; 1190bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1191bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <> 1192bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantstruct __narrow_to_utf8<8> 1193bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 1194bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant template <class _OutputIterator, class _CharT> 1195bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 1196bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _OutputIterator 1197bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant operator()(_OutputIterator __s, const _CharT* __wb, const _CharT* __we) const 1198bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 1199bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant for (; __wb < __we; ++__wb, ++__s) 1200bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant *__s = *__wb; 1201bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return __s; 1202bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 1203bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}; 1204bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1205bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <> 1206bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantstruct __narrow_to_utf8<16> 1207bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant : public codecvt<char16_t, char, mbstate_t> 1208bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 1209bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 1210bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __narrow_to_utf8() : codecvt<char16_t, char, mbstate_t>(1) {} 1211bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1212bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ~__narrow_to_utf8(); 1213bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1214bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant template <class _OutputIterator, class _CharT> 1215bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 1216bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _OutputIterator 1217bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant operator()(_OutputIterator __s, const _CharT* __wb, const _CharT* __we) const 1218bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 1219bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant result __r = ok; 1220bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant mbstate_t __mb; 1221bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant while (__wb < __we && __r != error) 1222bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 1223bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const int __sz = 32; 1224bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char __buf[__sz]; 1225bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char* __bn; 1226bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const char16_t* __wn = (const char16_t*)__wb; 1227bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __r = do_out(__mb, (const char16_t*)__wb, (const char16_t*)__we, __wn, 1228bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __buf, __buf+__sz, __bn); 1229bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant if (__r == codecvt_base::error || __wn == (const char16_t*)__wb) 1230bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __throw_runtime_error("locale not supported"); 1231bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant for (const char* __p = __buf; __p < __bn; ++__p, ++__s) 1232bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant *__s = *__p; 1233bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __wb = (const _CharT*)__wn; 1234bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 1235bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return __s; 1236bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 1237bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}; 1238bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1239bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <> 1240bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantstruct __narrow_to_utf8<32> 1241bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant : public codecvt<char32_t, char, mbstate_t> 1242bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 1243bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 1244bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __narrow_to_utf8() : codecvt<char32_t, char, mbstate_t>(1) {} 1245bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1246bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ~__narrow_to_utf8(); 1247bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1248bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant template <class _OutputIterator, class _CharT> 1249bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 1250bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _OutputIterator 1251bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant operator()(_OutputIterator __s, const _CharT* __wb, const _CharT* __we) const 1252bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 1253bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant result __r = ok; 1254bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant mbstate_t __mb; 1255bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant while (__wb < __we && __r != error) 1256bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 1257bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const int __sz = 32; 1258bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char __buf[__sz]; 1259bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char* __bn; 1260bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const char32_t* __wn = (const char32_t*)__wb; 1261bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __r = do_out(__mb, (const char32_t*)__wb, (const char32_t*)__we, __wn, 1262bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __buf, __buf+__sz, __bn); 1263bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant if (__r == codecvt_base::error || __wn == (const char32_t*)__wb) 1264bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __throw_runtime_error("locale not supported"); 1265bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant for (const char* __p = __buf; __p < __bn; ++__p, ++__s) 1266bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant *__s = *__p; 1267bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __wb = (const _CharT*)__wn; 1268bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 1269bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return __s; 1270bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 1271bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}; 1272bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 12739996844df0f22a68a1af6d30c611be1f1ebf1486Howard Hinnanttemplate <size_t _Np> 1274bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantstruct __widen_from_utf8 1275bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 1276bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant template <class _OutputIterator> 1277bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _OutputIterator 1278bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant operator()(_OutputIterator __s, const char* __nb, const char* __ne) const; 1279bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}; 1280bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1281bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <> 1282bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantstruct __widen_from_utf8<8> 1283bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 1284bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant template <class _OutputIterator> 1285bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 1286bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _OutputIterator 1287bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant operator()(_OutputIterator __s, const char* __nb, const char* __ne) const 1288bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 1289bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant for (; __nb < __ne; ++__nb, ++__s) 1290bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant *__s = *__nb; 1291bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return __s; 1292bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 1293bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}; 1294bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1295bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <> 1296bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantstruct __widen_from_utf8<16> 1297bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant : public codecvt<char16_t, char, mbstate_t> 1298bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 1299bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 1300bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __widen_from_utf8() : codecvt<char16_t, char, mbstate_t>(1) {} 1301bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1302bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ~__widen_from_utf8(); 1303bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1304bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant template <class _OutputIterator> 1305bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 1306bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _OutputIterator 1307bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant operator()(_OutputIterator __s, const char* __nb, const char* __ne) const 1308bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 1309bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant result __r = ok; 1310bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant mbstate_t __mb; 1311bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant while (__nb < __ne && __r != error) 1312bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 1313bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const int __sz = 32; 1314bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char16_t __buf[__sz]; 1315bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char16_t* __bn; 1316bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const char* __nn = __nb; 1317bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __r = do_in(__mb, __nb, __ne - __nb > __sz ? __nb+__sz : __ne, __nn, 1318bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __buf, __buf+__sz, __bn); 1319bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant if (__r == codecvt_base::error || __nn == __nb) 1320bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __throw_runtime_error("locale not supported"); 1321bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant for (const char16_t* __p = __buf; __p < __bn; ++__p, ++__s) 1322bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant *__s = (wchar_t)*__p; 1323bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __nb = __nn; 1324bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 1325bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return __s; 1326bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 1327bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}; 1328bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1329bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <> 1330bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantstruct __widen_from_utf8<32> 1331bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant : public codecvt<char32_t, char, mbstate_t> 1332bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 1333bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 1334bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __widen_from_utf8() : codecvt<char32_t, char, mbstate_t>(1) {} 1335bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1336bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ~__widen_from_utf8(); 1337bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1338bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant template <class _OutputIterator> 1339bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE 1340bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _OutputIterator 1341bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant operator()(_OutputIterator __s, const char* __nb, const char* __ne) const 1342bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 1343bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant result __r = ok; 1344bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant mbstate_t __mb; 1345bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant while (__nb < __ne && __r != error) 1346bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant { 1347bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const int __sz = 32; 1348bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char32_t __buf[__sz]; 1349bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char32_t* __bn; 1350bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant const char* __nn = __nb; 1351bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __r = do_in(__mb, __nb, __ne - __nb > __sz ? __nb+__sz : __ne, __nn, 1352bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __buf, __buf+__sz, __bn); 1353bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant if (__r == codecvt_base::error || __nn == __nb) 1354bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __throw_runtime_error("locale not supported"); 1355bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant for (const char32_t* __p = __buf; __p < __bn; ++__p, ++__s) 1356bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant *__s = (wchar_t)*__p; 1357bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant __nb = __nn; 1358bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 1359bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant return __s; 1360bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant } 1361bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}; 1362bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1363bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// template <class charT> class numpunct 1364bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 13650f678bd69ef6428e6c75ae1b43fcf1543df63cdaHoward Hinnanttemplate <class _CharT> class _LIBCPP_TYPE_VIS_ONLY numpunct; 1366bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1367bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <> 136883eade6abb414e0e814977921bcb6e46853cae03Howard Hinnantclass _LIBCPP_TYPE_VIS numpunct<char> 1369bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant : public locale::facet 1370bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 1371bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantpublic: 1372bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef char char_type; 1373bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef basic_string<char_type> string_type; 1374bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1375bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant explicit numpunct(size_t __refs = 0); 1376bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1377bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE char_type decimal_point() const {return do_decimal_point();} 1378bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE char_type thousands_sep() const {return do_thousands_sep();} 1379bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE string grouping() const {return do_grouping();} 1380bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE string_type truename() const {return do_truename();} 1381bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE string_type falsename() const {return do_falsename();} 1382bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1383bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static locale::id id; 1384bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1385bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantprotected: 1386bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ~numpunct(); 1387bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual char_type do_decimal_point() const; 1388bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual char_type do_thousands_sep() const; 1389bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual string do_grouping() const; 1390bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual string_type do_truename() const; 1391bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual string_type do_falsename() const; 1392bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1393bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char_type __decimal_point_; 1394bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char_type __thousands_sep_; 1395bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant string __grouping_; 1396bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}; 1397bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1398bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <> 139983eade6abb414e0e814977921bcb6e46853cae03Howard Hinnantclass _LIBCPP_TYPE_VIS numpunct<wchar_t> 1400bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant : public locale::facet 1401bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 1402bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantpublic: 1403bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef wchar_t char_type; 1404bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef basic_string<char_type> string_type; 1405bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1406bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant explicit numpunct(size_t __refs = 0); 1407bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1408bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE char_type decimal_point() const {return do_decimal_point();} 1409bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE char_type thousands_sep() const {return do_thousands_sep();} 1410bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE string grouping() const {return do_grouping();} 1411bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE string_type truename() const {return do_truename();} 1412bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant _LIBCPP_ALWAYS_INLINE string_type falsename() const {return do_falsename();} 1413bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1414bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant static locale::id id; 1415bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1416bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantprotected: 1417bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ~numpunct(); 1418bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual char_type do_decimal_point() const; 1419bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual char_type do_thousands_sep() const; 1420bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual string do_grouping() const; 1421bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual string_type do_truename() const; 1422bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant virtual string_type do_falsename() const; 1423bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1424bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char_type __decimal_point_; 1425bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant char_type __thousands_sep_; 1426bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant string __grouping_; 1427bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}; 1428bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1429bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant// template <class charT> class numpunct_byname 1430bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 14314dc5b2198d1aa4ab585a3d4a87ee9626d681f9f7Dan Alberttemplate <class _CharT> class _LIBCPP_TYPE_VIS_ONLY numpunct_byname; 1432bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1433bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <> 143483eade6abb414e0e814977921bcb6e46853cae03Howard Hinnantclass _LIBCPP_TYPE_VIS numpunct_byname<char> 1435bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant: public numpunct<char> 1436bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 1437bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantpublic: 1438bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef char char_type; 1439bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef basic_string<char_type> string_type; 1440bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1441bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant explicit numpunct_byname(const char* __nm, size_t __refs = 0); 1442bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant explicit numpunct_byname(const string& __nm, size_t __refs = 0); 1443bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1444bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantprotected: 1445bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ~numpunct_byname(); 1446bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1447bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantprivate: 1448bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant void __init(const char*); 1449bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}; 1450bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1451bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnanttemplate <> 145283eade6abb414e0e814977921bcb6e46853cae03Howard Hinnantclass _LIBCPP_TYPE_VIS numpunct_byname<wchar_t> 1453bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant: public numpunct<wchar_t> 1454bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant{ 1455bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantpublic: 1456bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef wchar_t char_type; 1457bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant typedef basic_string<char_type> string_type; 1458bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1459bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant explicit numpunct_byname(const char* __nm, size_t __refs = 0); 1460bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant explicit numpunct_byname(const string& __nm, size_t __refs = 0); 1461bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1462bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantprotected: 1463bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant ~numpunct_byname(); 1464bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1465bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantprivate: 1466bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant void __init(const char*); 1467bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant}; 1468bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1469bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant_LIBCPP_END_NAMESPACE_STD 1470bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 1471bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#endif // _LIBCPP___LOCALE 1472