34 #ifndef _LOCALE_CLASSES_H 35 #define _LOCALE_CLASSES_H 1 37 #pragma GCC system_header 43 namespace std _GLIBCXX_VISIBILITY(default)
45 _GLIBCXX_BEGIN_NAMESPACE_VERSION
77 template<
typename _Facet>
81 template<typename _Facet>
85 template<typename _Cache>
86 friend struct __use_cache;
98 static const category
none = 0;
99 static const category
ctype = 1L << 0;
102 static const category
time = 1L << 3;
126 locale(const locale& __other) throw();
137 locale(const
char* __s);
151 locale(const locale& __base, const
char* __s, category __cat);
153 #if __cplusplus >= 201103L 178 : locale(__base, __s.c_str(), __cat) { }
192 locale(
const locale& __base,
const locale& __add, category __cat);
205 template<
typename _Facet>
206 locale(
const locale& __other, _Facet* __f);
220 operator=(
const locale& __other)
throw();
234 template<
typename _Facet>
236 combine(
const locale& __other)
const;
243 _GLIBCXX_DEFAULT_ABI_TAG
255 operator==(
const locale& __other)
const throw();
282 template<
typename _Char,
typename _Traits,
typename _Alloc>
299 global(
const locale& __loc);
312 static _Impl* _S_classic;
315 static _Impl* _S_global;
321 static const char*
const*
const _S_categories;
333 enum { _S_categories_size = 6 + _GLIBCXX_NUM_CATEGORIES };
336 static __gthread_once_t _S_once;
346 _S_initialize_once()
throw();
349 _S_normalize_category(category);
352 _M_coalesce(
const locale& __base,
const locale& __add, category __cat);
354 #if _GLIBCXX_USE_CXX11_ABI 355 static const id*
const _S_twinned_facets[];
375 friend class locale::_Impl;
377 mutable _Atomic_word _M_refcount;
380 static __c_locale _S_c_locale;
383 static const char _S_c_name[2];
386 static __gthread_once_t _S_once;
390 _S_initialize_once();
403 facet(
size_t __refs = 0) throw() : _M_refcount(__refs ? 1 : 0)
411 _S_create_c_locale(__c_locale& __cloc,
const char* __s,
412 __c_locale __old = 0);
415 _S_clone_c_locale(__c_locale& __cloc)
throw();
418 _S_destroy_c_locale(__c_locale& __cloc);
421 _S_lc_ctype_c_locale(__c_locale __cloc,
const char* __s);
428 _GLIBCXX_CONST
static const char*
429 _S_get_c_name()
throw();
431 #if __cplusplus < 201103L 446 _M_add_reference()
const throw()
447 { __gnu_cxx::__atomic_add_dispatch(&_M_refcount, 1); }
450 _M_remove_reference()
const throw()
453 _GLIBCXX_SYNCHRONIZATION_HAPPENS_BEFORE(&_M_refcount);
454 if (__gnu_cxx::__exchange_and_add_dispatch(&_M_refcount, -1) == 1)
456 _GLIBCXX_SYNCHRONIZATION_HAPPENS_AFTER(&_M_refcount);
466 const facet* _M_sso_shim(
const id*)
const;
467 const facet* _M_cow_shim(
const id*)
const;
486 friend class locale::_Impl;
488 template<
typename _Facet>
492 template<
typename _Facet>
499 mutable size_t _M_index;
502 static _Atomic_word _S_refcount;
516 _M_id()
const throw();
528 template<
typename _Facet>
532 template<
typename _Facet>
536 template<
typename _Cache>
537 friend struct __use_cache;
541 _Atomic_word _M_refcount;
542 const facet** _M_facets;
543 size_t _M_facets_size;
544 const facet** _M_caches;
547 static const locale::id*
const _S_id_numeric[];
548 static const locale::id*
const _S_id_collate[];
550 static const locale::id*
const _S_id_monetary[];
551 static const locale::id*
const _S_id_messages[];
552 static const locale::id*
const*
const _S_facet_categories[];
555 _M_add_reference()
throw()
556 { __gnu_cxx::__atomic_add_dispatch(&_M_refcount, 1); }
559 _M_remove_reference()
throw()
562 _GLIBCXX_SYNCHRONIZATION_HAPPENS_BEFORE(&_M_refcount);
563 if (__gnu_cxx::__exchange_and_add_dispatch(&_M_refcount, -1) == 1)
565 _GLIBCXX_SYNCHRONIZATION_HAPPENS_AFTER(&_M_refcount);
573 _Impl(
const _Impl&,
size_t);
574 _Impl(
const char*,
size_t);
575 _Impl(
size_t)
throw();
590 for (
size_t __i = 0; __ret && __i < _S_categories_size - 1; ++__i)
591 __ret = __builtin_strcmp(_M_names[__i], _M_names[__i + 1]) == 0;
596 _M_replace_categories(
const _Impl*, category);
599 _M_replace_category(
const _Impl*,
const locale::id*
const*);
602 _M_replace_facet(
const _Impl*,
const locale::id*);
607 template<
typename _Facet>
609 _M_init_facet(_Facet* __facet)
610 { _M_install_facet(&_Facet::id, __facet); }
612 template<
typename _Facet>
614 _M_init_facet_unchecked(_Facet* __facet)
616 __facet->_M_add_reference();
617 _M_facets[_Facet::id._M_id()] = __facet;
621 _M_install_cache(
const facet*,
size_t);
623 void _M_init_extra(
facet**);
624 void _M_init_extra(
void*,
void*,
const char*,
const char*);
640 template<
typename _CharT>
654 __c_locale _M_c_locale_collate;
669 : facet(__refs), _M_c_locale_collate(_S_get_c_locale())
683 : facet(__refs), _M_c_locale_collate(_S_clone_c_locale(__cloc))
699 compare(
const _CharT* __lo1,
const _CharT* __hi1,
700 const _CharT* __lo2,
const _CharT* __hi2)
const 701 {
return this->do_compare(__lo1, __hi1, __lo2, __hi2); }
719 {
return this->do_transform(__lo, __hi); }
732 hash(
const _CharT* __lo,
const _CharT* __hi)
const 733 {
return this->do_hash(__lo, __hi); }
737 _M_compare(
const _CharT*,
const _CharT*)
const throw();
740 _M_transform(_CharT*,
const _CharT*,
size_t)
const throw();
746 { _S_destroy_c_locale(_M_c_locale_collate); }
761 do_compare(
const _CharT* __lo1,
const _CharT* __hi1,
762 const _CharT* __lo2,
const _CharT* __hi2)
const;
775 do_transform(
const _CharT* __lo,
const _CharT* __hi)
const;
788 do_hash(
const _CharT* __lo,
const _CharT* __hi)
const;
791 template<
typename _CharT>
803 #ifdef _GLIBCXX_USE_WCHAR_T 814 template<
typename _CharT>
828 if (__builtin_strcmp(__s,
"C") != 0
829 && __builtin_strcmp(__s,
"POSIX") != 0)
831 this->_S_destroy_c_locale(this->_M_c_locale_collate);
832 this->_S_create_c_locale(this->_M_c_locale_collate, __s);
836 #if __cplusplus >= 201103L 847 _GLIBCXX_END_NAMESPACE_VERSION
_CharT char_type
Public typedefs.
friend const _Facet & use_facet(const locale &)
Return a facet.use_facet looks for and returns a reference to a facet of type Facet where Facet is th...
long hash(const _CharT *__lo, const _CharT *__hi) const
Return hash of a string.
static const category none
Category values.
static const category time
Category values.
locale(const std::string &__s)
Named locale constructor.
static const category monetary
Category values.
Facet ID class.The ID class provides facets with an index used to identify them. Every facet class mu...
_CharT char_type
Public typedefs.
bool operator()(const basic_string< _Char, _Traits, _Alloc > &__s1, const basic_string< _Char, _Traits, _Alloc > &__s2) const
Compare two strings according to collate.
basic_string< _CharT > string_type
Public typedefs.
Primary class template messages.This facet encapsulates the code to retrieve messages from message ca...
Facet for localized string comparison.
locale()
Default constructor.
const _CharT * c_str() const noexcept
Return const pointer to null-terminated contents.
Primary class template ctype facet.This template class defines classification and conversion function...
collate(size_t __refs=0)
Constructor performs initialization.
_GLIBCXX_DEFAULT_ABI_TAG string name() const
Return locale name.
facet(size_t __refs=0)
Facet constructor.
static const locale & classic()
Return reference to the C locale.
~locale()
Locale destructor.
locale combine(const locale &__other) const
Construct locale with another facet.
Localization functionality base class.The facet class is the base class for a localization feature...
string_type transform(const _CharT *__lo, const _CharT *__hi) const
Transform string to comparable form.
bool operator!=(const locale &__other) const
Locale inequality.
collate(__c_locale __cloc, size_t __refs=0)
Internal constructor. Not for general use.
friend bool has_facet(const locale &)
Test for the presence of a facet.has_facet tests the locale argument for the presence of the facet ty...
basic_string< _CharT > string_type
Public typedefs.
static const category all
Category values.
Container class for localization functionality.The locale class is first a class wrapper for C librar...
int category
Definition of locale::category.
virtual ~collate()
Destructor.
const locale & operator=(const locale &__other)
Assignment operator.
class collate_byname [22.2.4.2].
ISO C++ entities toplevel namespace is std.
locale(const locale &__base, const std::string &__s, category __cat)
Construct locale with facets from another locale.
static const category numeric
Category values.
static locale global(const locale &__loc)
Set global locale.
static locale::id id
Numpunct facet id.
int compare(const _CharT *__lo1, const _CharT *__hi1, const _CharT *__lo2, const _CharT *__hi2) const
Compare two strings.
bool operator==(const locale &__other) const
Locale equality.