| // -*- 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(Codecvt* pcvt = new Codecvt); // before C++14 |
| explicit wstring_convert(Codecvt* pcvt = new Codecvt); // before C++20 |
| wstring_convert() : wstring_convert(new Codecvt) {} // C++20 |
| explicit wstring_convert(Codecvt* pcvt); // C++20 |
| |
| wstring_convert(Codecvt* pcvt, state_type state); |
| explicit wstring_convert(const byte_string& byte_err, // explicit in C++14 |
| const wide_string& wide_err = wide_string()); |
| wstring_convert(const wstring_convert&) = delete; // C++14 |
| wstring_convert & operator=(const wstring_convert &) = delete; // C++14 |
| ~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(streambuf* bytebuf = 0, Codecvt* pcvt = new Codecvt, |
| state_type state = state_type()); // before C++14 |
| explicit wbuffer_convert(streambuf* bytebuf = nullptr, Codecvt* pcvt = new Codecvt, |
| state_type state = state_type()); // before C++20 |
| wbuffer_convert() : wbuffer_convert(nullptr) {} // C++20 |
| explicit wbuffer_convert(streambuf* bytebuf, Codecvt* pcvt = new Codecvt, |
| state_type state = state_type()); // C++20 |
| |
| wbuffer_convert(const wbuffer_convert&) = delete; // C++14 |
| wbuffer_convert & operator=(const wbuffer_convert &) = delete; // C++14 |
| ~wbuffer_convert(); // C++14 |
| |
| 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> |
| # 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 <version> |
| |
| # if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) |
| # pragma GCC system_header |
| # endif |
| |
| # endif // _LIBCPP_HAS_LOCALIZATION |
| |
| # if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20 |
| # include <atomic> |
| # include <concepts> |
| # include <cstdarg> |
| # include <iterator> |
| # include <mutex> |
| # include <optional> |
| # include <stdexcept> |
| # include <type_traits> |
| # include <typeinfo> |
| # endif |
| #endif // __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS) |
| |
| #endif // _LIBCPP_LOCALE |