| // -*- C++ -*- | |
| //===----------------------------------------------------------------------===// | |
| // | |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | |
| // See https://llvm.org/LICENSE.txt for license information. | |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | |
| // | |
| //===----------------------------------------------------------------------===// | |
| #ifndef _LIBCPP_LOCALE | |
| #define _LIBCPP_LOCALE | |
| /* | |
| locale synopsis | |
| namespace std | |
| { | |
| class locale | |
| { | |
| public: | |
| // types: | |
| class facet; | |
| class id; | |
| typedef int category; | |
| static const category // values assigned here are for exposition only | |
| none = 0x000, | |
| collate = 0x010, | |
| ctype = 0x020, | |
| monetary = 0x040, | |
| numeric = 0x080, | |
| time = 0x100, | |
| messages = 0x200, | |
| all = collate | ctype | monetary | numeric | time | messages; | |
| // construct/copy/destroy: | |
| locale() noexcept; | |
| locale(const locale& other) noexcept; | |
| explicit locale(const char* std_name); | |
| explicit locale(const string& std_name); | |
| locale(const locale& other, const char* std_name, category); | |
| locale(const locale& other, const string& std_name, category); | |
| template <class Facet> locale(const locale& other, Facet* f); | |
| locale(const locale& other, const locale& one, category); | |
| ~locale(); // not virtual | |
| const locale& operator=(const locale& other) noexcept; | |
| template <class Facet> locale combine(const locale& other) const; | |
| // locale operations: | |
| basic_string<char> name() const; | |
| bool operator==(const locale& other) const; | |
| bool operator!=(const locale& other) const; // removed C++20 | |
| template <class charT, class Traits, class Allocator> | |
| bool operator()(const basic_string<charT,Traits,Allocator>& s1, | |
| const basic_string<charT,Traits,Allocator>& s2) const; | |
| // global locale objects: | |
| static locale global(const locale&); | |
| static const locale& classic(); | |
| }; | |
| template <class Facet> const Facet& use_facet(const locale&); | |
| template <class Facet> bool has_facet(const locale&) noexcept; | |
| // 22.3.3, convenience interfaces: | |
| template <class charT> bool isspace (charT c, const locale& loc); | |
| template <class charT> bool isprint (charT c, const locale& loc); | |
| template <class charT> bool iscntrl (charT c, const locale& loc); | |
| template <class charT> bool isupper (charT c, const locale& loc); | |
| template <class charT> bool islower (charT c, const locale& loc); | |
| template <class charT> bool isalpha (charT c, const locale& loc); | |
| template <class charT> bool isdigit (charT c, const locale& loc); | |
| template <class charT> bool ispunct (charT c, const locale& loc); | |
| template <class charT> bool isxdigit(charT c, const locale& loc); | |
| template <class charT> bool isalnum (charT c, const locale& loc); | |
| template <class charT> bool isgraph (charT c, const locale& loc); | |
| template <class charT> charT toupper(charT c, const locale& loc); | |
| template <class charT> charT tolower(charT c, const locale& loc); | |
| template<class Codecvt, class Elem = wchar_t, | |
| class Wide_alloc = allocator<Elem>, | |
| class Byte_alloc = allocator<char>> | |
| class wstring_convert // Removed in C++26 | |
| { | |
| public: | |
| typedef basic_string<char, char_traits<char>, Byte_alloc> byte_string; | |
| typedef basic_string<Elem, char_traits<Elem>, Wide_alloc> wide_string; | |
| typedef typename Codecvt::state_type state_type; | |
| typedef typename wide_string::traits_type::int_type int_type; | |
| wstring_convert() : wstring_convert(new Codecvt) {} | |
| explicit wstring_convert(Codecvt* pcvt); | |
| wstring_convert(Codecvt* pcvt, state_type state); | |
| explicit wstring_convert(const byte_string& byte_err, | |
| const wide_string& wide_err = wide_string()); | |
| wstring_convert(const wstring_convert&) = delete; | |
| wstring_convert & operator=(const wstring_convert &) = delete; | |
| ~wstring_convert(); | |
| wide_string from_bytes(char byte); | |
| wide_string from_bytes(const char* ptr); | |
| wide_string from_bytes(const byte_string& str); | |
| wide_string from_bytes(const char* first, const char* last); | |
| byte_string to_bytes(Elem wchar); | |
| byte_string to_bytes(const Elem* wptr); | |
| byte_string to_bytes(const wide_string& wstr); | |
| byte_string to_bytes(const Elem* first, const Elem* last); | |
| size_t converted() const; // noexcept in C++14 | |
| state_type state() const; | |
| }; | |
| template <class Codecvt, class Elem = wchar_t, class Tr = char_traits<Elem>> | |
| class wbuffer_convert // Removed in C++26 | |
| : public basic_streambuf<Elem, Tr> | |
| { | |
| public: | |
| typedef typename Tr::state_type state_type; | |
| wbuffer_convert() : wbuffer_convert(nullptr) {} | |
| explicit wbuffer_convert(streambuf* bytebuf, Codecvt* pcvt = new Codecvt, | |
| state_type state = state_type()); | |
| wbuffer_convert(const wbuffer_convert&) = delete; | |
| wbuffer_convert & operator=(const wbuffer_convert &) = delete; | |
| ~wbuffer_convert(); | |
| streambuf* rdbuf() const; | |
| streambuf* rdbuf(streambuf* bytebuf); | |
| state_type state() const; | |
| }; | |
| // 22.4.1 and 22.4.1.3, ctype: | |
| class ctype_base; | |
| template <class charT> class ctype; | |
| template <> class ctype<char>; // specialization | |
| template <class charT> class ctype_byname; | |
| template <> class ctype_byname<char>; // specialization | |
| class codecvt_base; | |
| template <class internT, class externT, class stateT> class codecvt; | |
| template <class internT, class externT, class stateT> class codecvt_byname; | |
| // 22.4.2 and 22.4.3, numeric: | |
| template <class charT, class InputIterator> class num_get; | |
| template <class charT, class OutputIterator> class num_put; | |
| template <class charT> class numpunct; | |
| template <class charT> class numpunct_byname; | |
| // 22.4.4, col lation: | |
| template <class charT> class collate; | |
| template <class charT> class collate_byname; | |
| // 22.4.5, date and time: | |
| class time_base; | |
| template <class charT, class InputIterator> class time_get; | |
| template <class charT, class InputIterator> class time_get_byname; | |
| template <class charT, class OutputIterator> class time_put; | |
| template <class charT, class OutputIterator> class time_put_byname; | |
| // 22.4.6, money: | |
| class money_base; | |
| template <class charT, class InputIterator> class money_get; | |
| template <class charT, class OutputIterator> class money_put; | |
| template <class charT, bool Intl> class moneypunct; | |
| template <class charT, bool Intl> class moneypunct_byname; | |
| // 22.4.7, message retrieval: | |
| class messages_base; | |
| template <class charT> class messages; | |
| template <class charT> class messages_byname; | |
| } // std | |
| */ | |
| #if __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS) | |
| # include <__cxx03/locale> | |
| #else | |
| # include <__config> | |
| # if _LIBCPP_HAS_LOCALIZATION | |
| # include <__locale_dir/codecvt.h> | |
| # include <__locale_dir/collate.h> | |
| # include <__locale_dir/ctype.h> | |
| # include <__locale_dir/ctype_base.h> | |
| # include <__locale_dir/locale.h> | |
| # include <__locale_dir/messages.h> | |
| # include <__locale_dir/money.h> | |
| # include <__locale_dir/num.h> | |
| # include <__locale_dir/time.h> | |
| # include <__locale_dir/wbuffer_convert.h> | |
| # include <__locale_dir/wstring_convert.h> | |
| # include <ios> | |
| # include <streambuf> | |
| # include <version> | |
| # if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) | |
| # pragma GCC system_header | |
| # endif | |
| # endif // _LIBCPP_HAS_LOCALIZATION | |
| #endif // __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS) | |
| #endif // _LIBCPP_LOCALE |