brintos

brintos / llvm-project-archived public Read only

0
0
Text · 8.1 KiB · b50f9c8 Raw
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