227 lines · plain
1// -*- C++ -*-2//===----------------------------------------------------------------------===//3//4// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.5// See https://llvm.org/LICENSE.txt for license information.6// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception7//8//===----------------------------------------------------------------------===//9 10#ifndef _LIBCPP_LOCALE11#define _LIBCPP_LOCALE12 13/*14 locale synopsis15 16namespace std17{18 19class locale20{21public:22 // types:23 class facet;24 class id;25 26 typedef int category;27 static const category // values assigned here are for exposition only28 none = 0x000,29 collate = 0x010,30 ctype = 0x020,31 monetary = 0x040,32 numeric = 0x080,33 time = 0x100,34 messages = 0x200,35 all = collate | ctype | monetary | numeric | time | messages;36 37 // construct/copy/destroy:38 locale() noexcept;39 locale(const locale& other) noexcept;40 explicit locale(const char* std_name);41 explicit locale(const string& std_name);42 locale(const locale& other, const char* std_name, category);43 locale(const locale& other, const string& std_name, category);44 template <class Facet> locale(const locale& other, Facet* f);45 locale(const locale& other, const locale& one, category);46 47 ~locale(); // not virtual48 49 const locale& operator=(const locale& other) noexcept;50 51 template <class Facet> locale combine(const locale& other) const;52 53 // locale operations:54 basic_string<char> name() const;55 bool operator==(const locale& other) const;56 bool operator!=(const locale& other) const; // removed C++2057 template <class charT, class Traits, class Allocator>58 bool operator()(const basic_string<charT,Traits,Allocator>& s1,59 const basic_string<charT,Traits,Allocator>& s2) const;60 61 // global locale objects:62 static locale global(const locale&);63 static const locale& classic();64};65 66template <class Facet> const Facet& use_facet(const locale&);67template <class Facet> bool has_facet(const locale&) noexcept;68 69// 22.3.3, convenience interfaces:70template <class charT> bool isspace (charT c, const locale& loc);71template <class charT> bool isprint (charT c, const locale& loc);72template <class charT> bool iscntrl (charT c, const locale& loc);73template <class charT> bool isupper (charT c, const locale& loc);74template <class charT> bool islower (charT c, const locale& loc);75template <class charT> bool isalpha (charT c, const locale& loc);76template <class charT> bool isdigit (charT c, const locale& loc);77template <class charT> bool ispunct (charT c, const locale& loc);78template <class charT> bool isxdigit(charT c, const locale& loc);79template <class charT> bool isalnum (charT c, const locale& loc);80template <class charT> bool isgraph (charT c, const locale& loc);81template <class charT> charT toupper(charT c, const locale& loc);82template <class charT> charT tolower(charT c, const locale& loc);83 84template<class Codecvt, class Elem = wchar_t,85 class Wide_alloc = allocator<Elem>,86 class Byte_alloc = allocator<char>>87class wstring_convert // Removed in C++2688{89public:90 typedef basic_string<char, char_traits<char>, Byte_alloc> byte_string;91 typedef basic_string<Elem, char_traits<Elem>, Wide_alloc> wide_string;92 typedef typename Codecvt::state_type state_type;93 typedef typename wide_string::traits_type::int_type int_type;94 95 wstring_convert(Codecvt* pcvt = new Codecvt); // before C++1496 explicit wstring_convert(Codecvt* pcvt = new Codecvt); // before C++2097 wstring_convert() : wstring_convert(new Codecvt) {} // C++2098 explicit wstring_convert(Codecvt* pcvt); // C++2099 100 wstring_convert(Codecvt* pcvt, state_type state);101 explicit wstring_convert(const byte_string& byte_err, // explicit in C++14102 const wide_string& wide_err = wide_string());103 wstring_convert(const wstring_convert&) = delete; // C++14104 wstring_convert & operator=(const wstring_convert &) = delete; // C++14105 ~wstring_convert();106 107 wide_string from_bytes(char byte);108 wide_string from_bytes(const char* ptr);109 wide_string from_bytes(const byte_string& str);110 wide_string from_bytes(const char* first, const char* last);111 112 byte_string to_bytes(Elem wchar);113 byte_string to_bytes(const Elem* wptr);114 byte_string to_bytes(const wide_string& wstr);115 byte_string to_bytes(const Elem* first, const Elem* last);116 117 size_t converted() const; // noexcept in C++14118 state_type state() const;119};120 121template <class Codecvt, class Elem = wchar_t, class Tr = char_traits<Elem>>122class wbuffer_convert // Removed in C++26123 : public basic_streambuf<Elem, Tr>124{125public:126 typedef typename Tr::state_type state_type;127 128 wbuffer_convert(streambuf* bytebuf = 0, Codecvt* pcvt = new Codecvt,129 state_type state = state_type()); // before C++14130 explicit wbuffer_convert(streambuf* bytebuf = nullptr, Codecvt* pcvt = new Codecvt,131 state_type state = state_type()); // before C++20132 wbuffer_convert() : wbuffer_convert(nullptr) {} // C++20133 explicit wbuffer_convert(streambuf* bytebuf, Codecvt* pcvt = new Codecvt,134 state_type state = state_type()); // C++20135 136 wbuffer_convert(const wbuffer_convert&) = delete; // C++14137 wbuffer_convert & operator=(const wbuffer_convert &) = delete; // C++14138 ~wbuffer_convert(); // C++14139 140 streambuf* rdbuf() const;141 streambuf* rdbuf(streambuf* bytebuf);142 143 state_type state() const;144};145 146// 22.4.1 and 22.4.1.3, ctype:147class ctype_base;148template <class charT> class ctype;149template <> class ctype<char>; // specialization150template <class charT> class ctype_byname;151template <> class ctype_byname<char>; // specialization152 153class codecvt_base;154template <class internT, class externT, class stateT> class codecvt;155template <class internT, class externT, class stateT> class codecvt_byname;156 157// 22.4.2 and 22.4.3, numeric:158template <class charT, class InputIterator> class num_get;159template <class charT, class OutputIterator> class num_put;160template <class charT> class numpunct;161template <class charT> class numpunct_byname;162 163// 22.4.4, col lation:164template <class charT> class collate;165template <class charT> class collate_byname;166 167// 22.4.5, date and time:168class time_base;169template <class charT, class InputIterator> class time_get;170template <class charT, class InputIterator> class time_get_byname;171template <class charT, class OutputIterator> class time_put;172template <class charT, class OutputIterator> class time_put_byname;173 174// 22.4.6, money:175class money_base;176template <class charT, class InputIterator> class money_get;177template <class charT, class OutputIterator> class money_put;178template <class charT, bool Intl> class moneypunct;179template <class charT, bool Intl> class moneypunct_byname;180 181// 22.4.7, message retrieval:182class messages_base;183template <class charT> class messages;184template <class charT> class messages_byname;185 186} // std187 188*/189 190#if __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS)191# include <__cxx03/locale>192#else193# include <__config>194 195# if _LIBCPP_HAS_LOCALIZATION196 197# include <__locale>198# include <__locale_dir/messages.h>199# include <__locale_dir/money.h>200# include <__locale_dir/num.h>201# include <__locale_dir/time.h>202# include <__locale_dir/wbuffer_convert.h>203# include <__locale_dir/wstring_convert.h>204# include <ios>205# include <version>206 207# if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)208# pragma GCC system_header209# endif210 211# endif // _LIBCPP_HAS_LOCALIZATION212 213# if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20214# include <atomic>215# include <concepts>216# include <cstdarg>217# include <iterator>218# include <mutex>219# include <optional>220# include <stdexcept>221# include <type_traits>222# include <typeinfo>223# endif224#endif // __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS)225 226#endif // _LIBCPP_LOCALE227