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;
105 static const category
all = (ctype | numeric | collate |
151 locale(const
locale& __base, const
char* __s, category __cat);
153 #if __cplusplus >= 201103L 178 :
locale(__base, __s.c_str(), __cat) { }
205 template<
typename _Facet>
234 template<
typename _Facet>
243 _GLIBCXX_DEFAULT_ABI_TAG
282 template<
typename _Char,
typename _Traits,
typename _Alloc>
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);
464 const facet* _M_sso_shim(
const id*)
const;
465 const facet* _M_cow_shim(
const id*)
const;
487 friend class locale::_Impl;
489 template<
typename _Facet>
493 template<
typename _Facet>
500 mutable size_t _M_index;
503 static _Atomic_word _S_refcount;
517 _M_id()
const throw();
529 template<
typename _Facet>
533 template<
typename _Facet>
537 template<
typename _Cache>
538 friend struct __use_cache;
542 _Atomic_word _M_refcount;
543 const facet** _M_facets;
544 size_t _M_facets_size;
545 const facet** _M_caches;
548 static const locale::id*
const _S_id_numeric[];
549 static const locale::id*
const _S_id_collate[];
551 static const locale::id*
const _S_id_monetary[];
552 static const locale::id*
const _S_id_messages[];
553 static const locale::id*
const*
const _S_facet_categories[];
556 _M_add_reference()
throw()
557 { __gnu_cxx::__atomic_add_dispatch(&_M_refcount, 1); }
560 _M_remove_reference()
throw()
563 _GLIBCXX_SYNCHRONIZATION_HAPPENS_BEFORE(&_M_refcount);
564 if (__gnu_cxx::__exchange_and_add_dispatch(&_M_refcount, -1) == 1)
566 _GLIBCXX_SYNCHRONIZATION_HAPPENS_AFTER(&_M_refcount);
574 _Impl(
const _Impl&,
size_t);
575 _Impl(
const char*,
size_t);
576 _Impl(
size_t)
throw();
591 for (
size_t __i = 0; __ret && __i < _S_categories_size - 1; ++__i)
592 __ret = __builtin_strcmp(_M_names[__i], _M_names[__i + 1]) == 0;
597 _M_replace_categories(
const _Impl*, category);
600 _M_replace_category(
const _Impl*,
const locale::id*
const*);
603 _M_replace_facet(
const _Impl*,
const locale::id*);
608 template<
typename _Facet>
610 _M_init_facet(_Facet* __facet)
611 { _M_install_facet(&_Facet::id, __facet); }
613 template<
typename _Facet>
615 _M_init_facet_unchecked(_Facet* __facet)
617 __facet->_M_add_reference();
618 _M_facets[_Facet::id._M_id()] = __facet;
622 _M_install_cache(
const facet*,
size_t);
624 void _M_init_extra(
facet**);
625 void _M_init_extra(
void*,
void*,
const char*,
const char*);
641 template<
typename _CharT>
655 __c_locale _M_c_locale_collate;
670 : facet(__refs), _M_c_locale_collate(_S_get_c_locale())
684 : facet(__refs), _M_c_locale_collate(_S_clone_c_locale(__cloc))
700 compare(
const _CharT* __lo1,
const _CharT* __hi1,
701 const _CharT* __lo2,
const _CharT* __hi2)
const 702 {
return this->do_compare(__lo1, __hi1, __lo2, __hi2); }
720 {
return this->do_transform(__lo, __hi); }
733 hash(
const _CharT* __lo,
const _CharT* __hi)
const 734 {
return this->do_hash(__lo, __hi); }
738 _M_compare(
const _CharT*,
const _CharT*)
const throw();
741 _M_transform(_CharT*,
const _CharT*,
size_t)
const throw();
747 { _S_destroy_c_locale(_M_c_locale_collate); }
762 do_compare(
const _CharT* __lo1,
const _CharT* __hi1,
763 const _CharT* __lo2,
const _CharT* __hi2)
const;
776 do_transform(
const _CharT* __lo,
const _CharT* __hi)
const;
789 do_hash(
const _CharT* __lo,
const _CharT* __hi)
const;
792 template<
typename _CharT>
804 #ifdef _GLIBCXX_USE_WCHAR_T 815 template<
typename _CharT>
827 : collate<_CharT>(__refs)
829 if (__builtin_strcmp(__s,
"C") != 0
830 && __builtin_strcmp(__s,
"POSIX") != 0)
832 this->_S_destroy_c_locale(this->_M_c_locale_collate);
833 this->_S_create_c_locale(this->_M_c_locale_collate, __s);
837 #if __cplusplus >= 201103L 848 _GLIBCXX_END_NAMESPACE_VERSION
bool operator()(const basic_string< _Char, _Traits, _Alloc > &__s1, const basic_string< _Char, _Traits, _Alloc > &__s2) const
Compare two strings according to collate.
string_type transform(const _CharT *__lo, const _CharT *__hi) const
Transform string to comparable form.
bool operator==(const locale &__other) const
Locale equality.
locale(const std::string &__s)
Named locale constructor.
basic_string< _CharT > string_type
Public typedefs.
Facet for localized string comparison.
Localization functionality base class.The facet class is the base class for a localization feature...
ISO C++ entities toplevel namespace is std.
static locale::id id
Numpunct facet id.
collate(size_t __refs=0)
Constructor performs initialization.
locale()
Default constructor.
bool operator!=(const locale &__other) const
Locale inequality.
_CharT char_type
Public typedefs.
~locale()
Locale destructor.
static locale global(const locale &__loc)
Set global locale.
_CharT char_type
Public typedefs.
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...
collate(__c_locale __cloc, size_t __refs=0)
Internal constructor. Not for general use.
static const category messages
Category values.
Primary class template messages.This facet encapsulates the code to retrieve messages from message ca...
facet(size_t __refs=0)
Facet constructor.
static const locale & classic()
Return reference to the C locale.
static const category all
Category values.
_GLIBCXX_DEFAULT_ABI_TAG string name() const
Return locale name.
static const category numeric
Category values.
static const category none
Category values.
basic_string< _CharT > string_type
Public typedefs.
const _CharT * c_str() const noexcept
Return const pointer to null-terminated contents.
Container class for localization functionality.The locale class is first a class wrapper for C librar...
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...
int compare(const _CharT *__lo1, const _CharT *__hi1, const _CharT *__lo2, const _CharT *__hi2) const
Compare two strings.
static const category time
Category values.
virtual ~collate()
Destructor.
class collate_byname [22.2.4.2].
locale(const locale &__base, const std::string &__s, category __cat)
Construct locale with facets from another locale.
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...
int category
Definition of locale::category.
long hash(const _CharT *__lo, const _CharT *__hi) const
Return hash of a string.
locale combine(const locale &__other) const
Construct locale with another facet.
Primary class template ctype facet.This template class defines classification and conversion function...
const locale & operator=(const locale &__other)
Assignment operator.