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>
79 has_facet(
const locale&) throw();
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);
164 locale(const locale& __base, const locale& __add, category __cat);
177 template<typename _Facet>
178 locale(const locale& __other, _Facet* __f);
192 operator=(const locale& __other) throw();
206 template<typename _Facet>
208 combine(const locale& __other) const;
226 operator==(const locale& __other) const throw();
235 operator!=(const locale& __other) const throw()
253 template<
typename _Char,
typename _Traits,
typename _Alloc>
283 static _Impl* _S_classic;
286 static _Impl* _S_global;
292 static const char*
const*
const _S_categories;
304 enum { _S_categories_size = 6 + _GLIBCXX_NUM_CATEGORIES };
307 static __gthread_once_t _S_once;
317 _S_initialize_once() throw();
320 _S_normalize_category(category);
342 friend class locale::_Impl;
344 mutable _Atomic_word _M_refcount;
347 static __c_locale _S_c_locale;
350 static const char _S_c_name[2];
353 static __gthread_once_t _S_once;
357 _S_initialize_once();
370 facet(
size_t __refs = 0) throw() : _M_refcount(__refs ? 1 : 0)
378 _S_create_c_locale(__c_locale& __cloc,
const char* __s,
379 __c_locale __old = 0);
382 _S_clone_c_locale(__c_locale& __cloc)
throw();
385 _S_destroy_c_locale(__c_locale& __cloc);
388 _S_lc_ctype_c_locale(__c_locale __cloc,
const char* __s);
395 _GLIBCXX_CONST
static const char*
396 _S_get_c_name() throw();
400 _M_add_reference() const throw()
401 { __gnu_cxx::__atomic_add_dispatch(&_M_refcount, 1); }
404 _M_remove_reference()
const throw()
407 _GLIBCXX_SYNCHRONIZATION_HAPPENS_BEFORE(&_M_refcount);
408 if (__gnu_cxx::__exchange_and_add_dispatch(&_M_refcount, -1) == 1)
410 _GLIBCXX_SYNCHRONIZATION_HAPPENS_AFTER(&_M_refcount);
440 friend class locale::_Impl;
442 template<
typename _Facet>
446 template<
typename _Facet>
448 has_facet(
const locale&)
throw();
453 mutable size_t _M_index;
456 static _Atomic_word _S_refcount;
470 _M_id()
const throw();
482 template<
typename _Facet>
484 has_facet(
const locale&) throw();
486 template<typename _Facet>
490 template<typename _Cache>
491 friend struct __use_cache;
495 _Atomic_word _M_refcount;
496 const facet** _M_facets;
497 size_t _M_facets_size;
498 const facet** _M_caches;
500 static const locale::
id* const _S_id_ctype[];
501 static const locale::
id* const _S_id_numeric[];
502 static const locale::
id* const _S_id_collate[];
503 static const locale::
id* const _S_id_time[];
504 static const locale::
id* const _S_id_monetary[];
505 static const locale::
id* const _S_id_messages[];
506 static const locale::
id* const* const _S_facet_categories[];
509 _M_add_reference() throw()
510 { __gnu_cxx::__atomic_add_dispatch(&_M_refcount, 1); }
513 _M_remove_reference() throw()
516 _GLIBCXX_SYNCHRONIZATION_HAPPENS_BEFORE(&_M_refcount);
517 if (__gnu_cxx::__exchange_and_add_dispatch(&_M_refcount, -1) == 1)
519 _GLIBCXX_SYNCHRONIZATION_HAPPENS_AFTER(&_M_refcount);
527 _Impl(
const _Impl&,
size_t);
528 _Impl(
const char*,
size_t);
529 _Impl(
size_t) throw();
536 operator=(const _Impl&);
544 for (
size_t __i = 0; __ret && __i < _S_categories_size - 1; ++__i)
545 __ret = __builtin_strcmp(_M_names[__i], _M_names[__i + 1]) == 0;
550 _M_replace_categories(
const _Impl*, category);
553 _M_replace_category(
const _Impl*,
const locale::id*
const*);
556 _M_replace_facet(
const _Impl*,
const locale::id*);
559 _M_install_facet(
const locale::id*,
const facet*);
561 template<
typename _Facet>
563 _M_init_facet(_Facet* __facet)
564 { _M_install_facet(&_Facet::id, __facet); }
567 _M_install_cache(
const facet*,
size_t);
583 template<
typename _CharT>
597 __c_locale _M_c_locale_collate;
612 : facet(__refs), _M_c_locale_collate(_S_get_c_locale())
626 : facet(__refs), _M_c_locale_collate(_S_clone_c_locale(__cloc))
642 compare(
const _CharT* __lo1,
const _CharT* __hi1,
643 const _CharT* __lo2,
const _CharT* __hi2)
const
644 {
return this->do_compare(__lo1, __hi1, __lo2, __hi2); }
662 {
return this->do_transform(__lo, __hi); }
675 hash(
const _CharT* __lo,
const _CharT* __hi)
const
676 {
return this->do_hash(__lo, __hi); }
680 _M_compare(
const _CharT*,
const _CharT*)
const throw();
683 _M_transform(_CharT*, const _CharT*,
size_t) const throw();
689 { _S_destroy_c_locale(_M_c_locale_collate); }
704 do_compare(
const _CharT* __lo1,
const _CharT* __hi1,
705 const _CharT* __lo2,
const _CharT* __hi2)
const;
718 do_transform(
const _CharT* __lo,
const _CharT* __hi)
const;
731 do_hash(
const _CharT* __lo,
const _CharT* __hi)
const;
734 template<
typename _CharT>
735 locale::id collate<_CharT>::id;
740 collate<char>::_M_compare(
const char*,
const char*)
const throw();
744 collate<
char>::_M_transform(
char*, const
char*,
size_t) const throw();
746 #ifdef _GLIBCXX_USE_WCHAR_T
749 collate<wchar_t>::_M_compare(
const wchar_t*,
const wchar_t*)
const throw();
753 collate<
wchar_t>::_M_transform(
wchar_t*, const
wchar_t*,
size_t) const throw();
757 template<
typename _CharT>
771 if (__builtin_strcmp(__s,
"C") != 0
772 && __builtin_strcmp(__s,
"POSIX") != 0)
774 this->_S_destroy_c_locale(this->_M_c_locale_collate);
775 this->_S_create_c_locale(this->_M_c_locale_collate, __s);
784 _GLIBCXX_END_NAMESPACE_VERSION
787 # include <bits/locale_classes.tcc>
Container class for localization functionality.The locale class is first a class wrapper for C librar...
int category
Definition of locale::category.
Primary class template ctype facet.This template class defines classification and conversion function...
collate(size_t __refs=0)
Constructor performs initialization.
int compare(const _CharT *__lo1, const _CharT *__hi1, const _CharT *__lo2, const _CharT *__hi2) const
Compare two strings.
locale combine(const locale &__other) const
Construct locale with another facet.
basic_string< _CharT > string_type
Public typedefs.
static const category all
Category values.
string name() const
Return locale name.
_CharT char_type
Public typedefs.
static const category none
Category values.
collate(__c_locale __cloc, size_t __refs=0)
Internal constructor. Not for general use.
_Siter_base< _Iterator >::iterator_type __base(_Iterator __it)
static locale global(const locale &__loc)
Set global locale.
Facet ID class.The ID class provides facets with an index used to identify them. Every facet class mu...
const locale & operator=(const locale &__other)
Assignment operator.
bool operator==(const locale &__other) const
Locale equality.
ISO C++ entities toplevel namespace is std.
static const category numeric
Category values.
class collate_byname [22.2.4.2].
string_type transform(const _CharT *__lo, const _CharT *__hi) const
Transform string to comparable form.
Primary class template messages.This facet encapsulates the code to retrieve messages from message ca...
static const category time
Category values.
static const category collate
Category values.
static locale::id id
Numpunct facet id.
Localization functionality base class.The facet class is the base class for a localization feature...
locale()
Default constructor.
bool operator()(const basic_string< _Char, _Traits, _Alloc > &__s1, const basic_string< _Char, _Traits, _Alloc > &__s2) const
Compare two strings according to collate.
long hash(const _CharT *__lo, const _CharT *__hi) const
Return hash of a string.
facet(size_t __refs=0)
Facet constructor.
static const locale & classic()
Return reference to the C locale.
Facet for localized string comparison.
static const category monetary
Category values.
_CharT char_type
Public typedefs.
basic_string< _CharT > string_type
Public typedefs.
Managing sequences of characters and character-like objects.