@@ -1114,7 +1114,21 @@ ctype_byname<wchar_t>::~ctype_byname()
1114
1114
bool
1115
1115
ctype_byname<wchar_t >::do_is (mask m, char_type c) const
1116
1116
{
1117
+ #ifdef _LIBCPP_WCTYPE_IS_MASK
1117
1118
return static_cast <bool >(iswctype_l (c, m, __l));
1119
+ #else
1120
+ if (m & space && !iswspace_l (c, __l)) return false ;
1121
+ if (m & print && !iswprint_l (c, __l)) return false ;
1122
+ if (m & cntrl && !iswcntrl_l (c, __l)) return false ;
1123
+ if (m & upper && !iswupper_l (c, __l)) return false ;
1124
+ if (m & lower && !iswlower_l (c, __l)) return false ;
1125
+ if (m & alpha && !iswalpha_l (c, __l)) return false ;
1126
+ if (m & digit && !iswdigit_l (c, __l)) return false ;
1127
+ if (m & punct && !iswpunct_l (c, __l)) return false ;
1128
+ if (m & xdigit && !iswxdigit_l (c, __l)) return false ;
1129
+ if (m & blank && !iswblank_l (c, __l)) return false ;
1130
+ return true ;
1131
+ #endif
1118
1132
}
1119
1133
1120
1134
const wchar_t *
@@ -1154,17 +1168,49 @@ const wchar_t*
1154
1168
ctype_byname<wchar_t >::do_scan_is (mask m, const char_type* low, const char_type* high) const
1155
1169
{
1156
1170
for (; low != high; ++low)
1171
+ {
1172
+ #ifdef _LIBCPP_WCTYPE_IS_MASK
1157
1173
if (iswctype_l (*low, m, __l))
1158
1174
break ;
1175
+ #else
1176
+ if (m & space && !iswspace_l (*low, __l)) continue ;
1177
+ if (m & print && !iswprint_l (*low, __l)) continue ;
1178
+ if (m & cntrl && !iswcntrl_l (*low, __l)) continue ;
1179
+ if (m & upper && !iswupper_l (*low, __l)) continue ;
1180
+ if (m & lower && !iswlower_l (*low, __l)) continue ;
1181
+ if (m & alpha && !iswalpha_l (*low, __l)) continue ;
1182
+ if (m & digit && !iswdigit_l (*low, __l)) continue ;
1183
+ if (m & punct && !iswpunct_l (*low, __l)) continue ;
1184
+ if (m & xdigit && !iswxdigit_l (*low, __l)) continue ;
1185
+ if (m & blank && !iswblank_l (*low, __l)) continue ;
1186
+ break ;
1187
+ #endif
1188
+ }
1159
1189
return low;
1160
1190
}
1161
1191
1162
1192
const wchar_t *
1163
1193
ctype_byname<wchar_t >::do_scan_not (mask m, const char_type* low, const char_type* high) const
1164
1194
{
1165
1195
for (; low != high; ++low)
1196
+ {
1197
+ #ifdef _LIBCPP_WCTYPE_IS_MASK
1166
1198
if (!iswctype_l (*low, m, __l))
1167
1199
break ;
1200
+ #else
1201
+ if (m & space && iswspace_l (*low, __l)) continue ;
1202
+ if (m & print && iswprint_l (*low, __l)) continue ;
1203
+ if (m & cntrl && iswcntrl_l (*low, __l)) continue ;
1204
+ if (m & upper && iswupper_l (*low, __l)) continue ;
1205
+ if (m & lower && iswlower_l (*low, __l)) continue ;
1206
+ if (m & alpha && iswalpha_l (*low, __l)) continue ;
1207
+ if (m & digit && iswdigit_l (*low, __l)) continue ;
1208
+ if (m & punct && iswpunct_l (*low, __l)) continue ;
1209
+ if (m & xdigit && iswxdigit_l (*low, __l)) continue ;
1210
+ if (m & blank && iswblank_l (*low, __l)) continue ;
1211
+ break ;
1212
+ #endif
1213
+ }
1168
1214
return low;
1169
1215
}
1170
1216
0 commit comments