34#ifndef _LOCALE_CLASSES_TCC
35#define _LOCALE_CLASSES_TCC 1
38#pragma GCC system_header
43#pragma GCC diagnostic push
44#pragma GCC diagnostic ignored "-Wc++11-extensions"
45#pragma GCC diagnostic ignored "-Wvariadic-macros"
47namespace std _GLIBCXX_VISIBILITY(default)
49_GLIBCXX_BEGIN_NAMESPACE_VERSION
51 template<
typename _Facet>
59 _M_impl = __other._M_impl;
60 _M_impl->_M_add_reference();
64 _M_impl =
new _Impl(*__other._M_impl, 1);
67 { _M_impl->_M_install_facet(&_Facet::id, __f); }
70 _M_impl->_M_remove_reference();
71 __throw_exception_again;
73 delete [] _M_impl->_M_names[0];
74 _M_impl->_M_names[0] = 0;
77 template<
typename _Facet>
82#if __cpp_lib_type_trait_variable_templates
86 _Impl*
__tmp =
new _Impl(*_M_impl, 1);
89 __tmp->_M_replace_facet(__other._M_impl, &_Facet::id);
93 __tmp->_M_remove_reference();
94 __throw_exception_again;
96 delete[]
__tmp->_M_names[0];
97 __tmp->_M_names[0] = 0;
101 template<
typename _CharT,
typename _Traits,
typename _Alloc>
113#pragma GCC diagnostic push
114#pragma GCC diagnostic ignored "-Wc++17-extensions"
115 template<
typename _Facet>
117 __try_use_facet(
const locale& __loc) _GLIBCXX_NOTHROW
119 const size_t __i = _Facet::id._M_id();
120 const locale::facet** __facets = __loc._M_impl->_M_facets;
124#define _GLIBCXX_STD_FACET(...) \
125 if _GLIBCXX_CONSTEXPR (__is_same(const _Facet, const __VA_ARGS__)) \
126 return static_cast<const _Facet*>(__facets[__i])
128 _GLIBCXX_STD_FACET(ctype<char>);
129 _GLIBCXX_STD_FACET(num_get<char>);
130 _GLIBCXX_STD_FACET(num_put<char>);
131 _GLIBCXX_STD_FACET(codecvt<char, char, mbstate_t>);
132 _GLIBCXX_STD_FACET(collate<char>);
133 _GLIBCXX_STD_FACET(moneypunct<char>);
134 _GLIBCXX_STD_FACET(moneypunct<char, true>);
135 _GLIBCXX_STD_FACET(money_get<char>);
136 _GLIBCXX_STD_FACET(money_put<char>);
137 _GLIBCXX_STD_FACET(numpunct<char>);
138 _GLIBCXX_STD_FACET(time_get<char>);
139 _GLIBCXX_STD_FACET(time_put<char>);
140 _GLIBCXX_STD_FACET(messages<char>);
142#ifdef _GLIBCXX_USE_WCHAR_T
143 _GLIBCXX_STD_FACET(ctype<wchar_t>);
144 _GLIBCXX_STD_FACET(num_get<wchar_t>);
145 _GLIBCXX_STD_FACET(num_put<wchar_t>);
146 _GLIBCXX_STD_FACET(codecvt<wchar_t, char, mbstate_t>);
147 _GLIBCXX_STD_FACET(collate<wchar_t>);
148 _GLIBCXX_STD_FACET(moneypunct<wchar_t>);
149 _GLIBCXX_STD_FACET(moneypunct<wchar_t, true>);
150 _GLIBCXX_STD_FACET(money_get<wchar_t>);
151 _GLIBCXX_STD_FACET(money_put<wchar_t>);
152 _GLIBCXX_STD_FACET(numpunct<wchar_t>);
153 _GLIBCXX_STD_FACET(time_get<wchar_t>);
154 _GLIBCXX_STD_FACET(time_put<wchar_t>);
155 _GLIBCXX_STD_FACET(messages<wchar_t>);
157#if __cplusplus >= 201103L
158 _GLIBCXX_STD_FACET(codecvt<char16_t, char, mbstate_t>);
159 _GLIBCXX_STD_FACET(codecvt<char32_t, char, mbstate_t>);
162#undef _GLIBCXX_STD_FACET
164 if (__i >= __loc._M_impl->_M_facets_size || !__facets[__i])
168 return dynamic_cast<const _Facet*
>(__facets[__i]);
170 return static_cast<const _Facet*
>(__facets[__i]);
173#pragma GCC diagnostic pop
187 template<
typename _Facet>
192#if __cplusplus >= 201103L
194 "template argument must be derived from locale::facet");
215#pragma GCC diagnostic push
216#pragma GCC diagnostic ignored "-Wdangling-reference"
217 template<
typename _Facet>
222#if __cplusplus >= 201103L
224 "template argument must be derived from locale::facet");
232#pragma GCC diagnostic pop
236 template<
typename _CharT>
242 template<
typename _CharT>
244 collate<_CharT>::_M_transform(_CharT*,
const _CharT*,
size_t)
const throw ()
247 template<
typename _CharT>
251 const _CharT*
__lo2,
const _CharT*
__hi2)
const
258 const _CharT* __p =
__one.c_str();
260 const _CharT* __q =
__two.c_str();
268 const int __res = _M_compare(__p, __q);
286 template<
typename _CharT>
296 const _CharT* __p =
__str.c_str();
304 : _M_c(
__buf ? (_CharT*)
__buf :
new _CharT[__n]),
319 _CharT* __p =
new _CharT[
__len];
348 __throw_system_error(errno);
369 __ret.push_back(_CharT());
375 template<
typename _CharT>
380 unsigned long __val = 0;
383 *
__lo + ((__val << 7)
384 | (__val >> (__gnu_cxx::__numeric_traits<unsigned long>::
386 return static_cast<long>(__val);
391#if _GLIBCXX_EXTERN_TEMPLATE
407#ifdef _GLIBCXX_USE_WCHAR_T
425_GLIBCXX_END_NAMESPACE_VERSION
428#pragma GCC diagnostic pop
const _Facet & use_facet(const locale &__loc)
Return a facet.
bool has_facet(const locale &__loc) noexcept
Test for the presence of a facet.
ISO C++ entities toplevel namespace is std.
Basis for explicit traits specializations.
Container class for localization functionality.
locale combine(const locale &__other) const
Construct locale with another facet.
bool operator()(const basic_string< _Char, _Traits, _Alloc > &__s1, const basic_string< _Char, _Traits, _Alloc > &__s2) const
Compare two strings according to collate.
locale()
Default constructor.
Localization functionality base class.
Facet for localized string comparison.
virtual long do_hash(const _CharT *__lo, const _CharT *__hi) const
Return hash of a string.
virtual string_type do_transform(const _CharT *__lo, const _CharT *__hi) const
Transform string to comparable form.
virtual int do_compare(const _CharT *__lo1, const _CharT *__hi1, const _CharT *__lo2, const _CharT *__hi2) const
Compare two strings.