]>
Commit | Line | Data |
---|---|---|
dbed5a9b JM |
1 | // Locale support -*- C++ -*- |
2 | ||
7adcbafe | 3 | // Copyright (C) 2014-2022 Free Software Foundation, Inc. |
dbed5a9b JM |
4 | // |
5 | // This file is part of the GNU ISO C++ Library. This library is free | |
6 | // software; you can redistribute it and/or modify it under the | |
7 | // terms of the GNU General Public License as published by the | |
8 | // Free Software Foundation; either version 3, or (at your option) | |
9 | // any later version. | |
10 | ||
11 | // This library is distributed in the hope that it will be useful, | |
12 | // but WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
14 | // GNU General Public License for more details. | |
15 | ||
16 | // Under Section 7 of GPL version 3, you are granted additional | |
17 | // permissions described in the GCC Runtime Library Exception, version | |
18 | // 3.1, as published by the Free Software Foundation. | |
19 | ||
20 | // You should have received a copy of the GNU General Public License and | |
21 | // a copy of the GCC Runtime Library Exception along with this program; | |
22 | // see the files COPYING3 and COPYING.RUNTIME respectively. If not, see | |
23 | // <http://www.gnu.org/licenses/>. | |
24 | ||
25 | /** @file bits/ctype_inline.h | |
26 | * This is an internal header file, included by other library headers. | |
27 | * Do not attempt to use it directly. @headername{locale} | |
28 | */ | |
29 | ||
30 | // | |
31 | // ISO C++ 14882: 22.1 Locales | |
32 | // | |
33 | ||
34 | // ctype bits to be inlined go here. Non-inlinable (ie virtual do_*) | |
35 | // functions go in ctype.cc | |
36 | ||
37 | namespace std _GLIBCXX_VISIBILITY(default) | |
38 | { | |
39 | _GLIBCXX_BEGIN_NAMESPACE_VERSION | |
40 | ||
41 | bool | |
42 | ctype<char>:: | |
43 | is(mask __m, char __c) const | |
44 | { | |
45 | if (_M_table) | |
46 | return _M_table[static_cast<unsigned char>(__c)] & __m; | |
47 | else | |
48 | return __istype(__c, __m); | |
49 | } | |
50 | ||
51 | const char* | |
52 | ctype<char>:: | |
53 | is(const char* __low, const char* __high, mask* __vec) const | |
54 | { | |
55 | if (_M_table) | |
56 | while (__low < __high) | |
57 | *__vec++ = _M_table[static_cast<unsigned char>(*__low++)]; | |
58 | else | |
59 | for (;__low < __high; ++__vec, ++__low) | |
60 | { | |
61 | *__vec = __maskrune (*__low, upper | lower | alpha | digit | xdigit | |
a3e4cd81 JW |
62 | | space | print | graph | cntrl | punct | alnum |
63 | | blank); | |
dbed5a9b JM |
64 | } |
65 | return __high; | |
66 | } | |
67 | ||
68 | const char* | |
69 | ctype<char>:: | |
70 | scan_is(mask __m, const char* __low, const char* __high) const | |
71 | { | |
72 | if (_M_table) | |
73 | while (__low < __high | |
74 | && !(_M_table[static_cast<unsigned char>(*__low)] & __m)) | |
75 | ++__low; | |
76 | else | |
77 | while (__low < __high && !this->is(__m, *__low)) | |
78 | ++__low; | |
79 | return __low; | |
80 | } | |
81 | ||
82 | const char* | |
83 | ctype<char>:: | |
84 | scan_not(mask __m, const char* __low, const char* __high) const | |
85 | { | |
86 | if (_M_table) | |
87 | while (__low < __high | |
88 | && (_M_table[static_cast<unsigned char>(*__low)] & __m) != 0) | |
89 | ++__low; | |
90 | else | |
91 | while (__low < __high && this->is(__m, *__low) != 0) | |
92 | ++__low; | |
93 | return __low; | |
94 | } | |
95 | ||
96 | #ifdef _GLIBCXX_USE_WCHAR_T | |
97 | inline bool | |
98 | ctype<wchar_t>:: | |
99 | do_is(mask __m, wchar_t __c) const | |
100 | { | |
101 | return __istype (__c, __m); | |
102 | } | |
103 | ||
104 | inline const wchar_t* | |
105 | ctype<wchar_t>:: | |
106 | do_is(const wchar_t* __lo, const wchar_t* __hi, mask* __vec) const | |
107 | { | |
108 | for (; __lo < __hi; ++__vec, ++__lo) | |
109 | *__vec = __maskrune (*__lo, upper | lower | alpha | digit | xdigit | |
a3e4cd81 JW |
110 | | space | print | graph | cntrl | punct | alnum |
111 | | blank); | |
dbed5a9b JM |
112 | return __hi; |
113 | } | |
114 | ||
115 | inline const wchar_t* | |
116 | ctype<wchar_t>:: | |
117 | do_scan_is(mask __m, const wchar_t* __lo, const wchar_t* __hi) const | |
118 | { | |
119 | while (__lo < __hi && ! __istype (*__lo, __m)) | |
120 | ++__lo; | |
121 | return __lo; | |
122 | } | |
123 | ||
124 | inline const wchar_t* | |
125 | ctype<wchar_t>:: | |
126 | do_scan_not(mask __m, const char_type* __lo, const char_type* __hi) const | |
127 | { | |
128 | while (__lo < __hi && __istype (*__lo, __m)) | |
129 | ++__lo; | |
130 | return __lo; | |
131 | } | |
132 | #endif | |
133 | ||
134 | _GLIBCXX_END_NAMESPACE_VERSION | |
135 | } // namespace |