1 #pragma once // Source encoding: UTF-8 with BOM (π is a lowercase Greek "pi"). 12 #include <c/string.hpp> 13 #include <c/ctype.hpp> 15 #include <string_view> 28 {
return !!::isspace( static_cast<Byte>( ch ) ); }
33 {
return !!::iswspace( ch ); }
40 basic_string, basic_string_view, invoke,
string, string_view, wstring, wstring_view
45 template<
class Integer >
54 for( It it = start; it != beyond; ++it )
56 if( not
contains( *it ) ) {
return false; }
61 template<
class Char,
class = Enable_if_<is_a_cpp03_
char_type_<Char>>>
66 template<
class Char,
class = Enable_if_<is_a_cpp03_
char_type_<Char>>>
71 template<
class Char,
class = Enable_if_<is_a_cpp03_
char_type_<Char>>>
79 template<
class Char,
class = Enable_if_<is_a_cpp03_
char_type_<Char>>>
80 inline auto to_wide(
const basic_string_view<Char>& v )
82 {
return wstring( v.begin(), v.end() ); }
84 template<
class Char,
class = Enable_if_<is_a_cpp03_
char_type_<Char>>>
87 {
return to_wide( basic_string_view<Char>( s ) ); }
89 template<
class Char,
class = Enable_if_<is_a_cpp03_
char_type_<Char>>>
90 inline auto to_wide(
const basic_string<Char>& s )
92 {
return to_wide( basic_string_view<Char>( s ) ); }
98 template<
class Char,
class = Enable_if_<is_a_cpp03_
char_type_<Char>>>
103 template<
class Char,
class = Enable_if_<is_a_cpp03_
char_type_<Char>>>
107 for(
const Char ch : sv )
117 template<
class Char,
class = Enable_if_<is_a_cpp03_
char_type_<Char>>>
122 template<
class Char,
class = Enable_if_<is_a_cpp03_
char_type_<Char>>>
130 static const string the_chars = invoke([]() ->
string 137 result += char( code );
148 template<
class Char,
class = Enable_if_<is_a_cpp03_
char_type_<Char>>>
151 {
return 'a' <= ch and ch <=
'z'; }
153 template<
class Char,
class = Enable_if_<is_a_cpp03_
char_type_<Char>>>
156 {
return 'A' <= ch and ch <=
'Z'; }
158 template<
class Char,
class = Enable_if_<is_a_cpp03_
char_type_<Char>>>
161 {
return (
is_uppercase( ch )? Char( ch -
'A' +
'a' ) : ch); }
163 template<
class Char,
class = Enable_if_<is_a_cpp03_
char_type_<Char>>>
166 {
return (
is_lowercase( ch )? Char( ch -
'a' +
'A' ) : ch); }
168 template<
class Char,
class = Enable_if_<is_a_cpp03_
char_type_<Char>>>
170 -> basic_string<Char>
172 basic_string<Char> result;
173 result.reserve( v.size() );
174 for(
const Char ch : v )
181 template<
class Char,
class = Enable_if_<is_a_cpp03_
char_type_<Char>>>
183 -> basic_string<Char>
185 basic_string<Char> result;
186 result.reserve( v.size() );
187 for(
const Char ch : v )
194 template<
class Char,
class = Enable_if_<is_a_cpp03_
char_type_<Char>>>
196 -> basic_string<Char>
197 {
return to_lowercase( basic_string_view<Char>( s ) ); }
199 template<
class Char,
class = Enable_if_<is_a_cpp03_
char_type_<Char>>>
201 -> basic_string<Char>
202 {
return to_uppercase( basic_string_view<Char>( s ) ); }
204 template<
class Char,
class = Enable_if_<is_a_cpp03_
char_type_<Char>>>
206 -> basic_string<Char>
207 {
return to_lowercase( basic_string_view<Char>( s ) ); }
209 template<
class Char,
class = Enable_if_<is_a_cpp03_
char_type_<Char>>>
211 -> basic_string<Char>
212 {
return to_uppercase( basic_string_view<Char>( s ) ); }
217 inline auto quoted(
const string_view& sv )
229 {
return quoted( string_view( &ch, 1 ) ); }
Some_type * P_
Creates a raw pointer type.
auto contains_all_of(const basic_string< Char > &s) -> Truth
A drop-in replacement for bool without implicit conversion from/to types other than bool.
auto is_all_whitespace(const P_< const Char > s) -> Truth
auto is_whitespace(const Char ch) -> Truth
std::make_unsigned_t< Integer > Unsigned_
For an integer type, produces the corresponding unsigned type.
Type_choice_, Unptr_, Unref_, Signed_, Unsigned_, Const_, Unconst_ and Array_of_.
Truth is a drop-in replacement for bool without implicit conversion from/to types other than bool.
auto is_space< wchar_t >(const wchar_t ch) -> Truth
CPPX_USE_STD(basic_string, basic_string_view, bitset, char_traits, size)
auto is_uppercase(const Char ch) -> Truth
auto to_lowercase(const basic_string< Char > &s) -> basic_string< Char >
auto to_uppercase(const basic_string< Char > &s) -> basic_string< Char >
$items_of eases use of standard library functions, e.g. sort( $items_of( numbers ) ).
auto quoted(const string_view &sv) -> string
#define CPPX_ITEMS_OF(c)
$items_of(c) effectively expands to std::begin(c), std::end(c).
std::enable_if_t< condition, Result > Enable_if_
Just more readable than enable_if_t.
Macros for generating more concise and clear using statements, primarily $use_cppx and $use_std,...
Byte and Signed_byte, + std::byte support definitions as_number and as_std_byte.
auto is_space(const Char ch) -> Truth
auto is_lowercase(const Char ch) -> Truth
auto contains(const Integer v) -> Truth
auto to_wide(const basic_string< Char > &s) -> wstring
auto whitespace_characters() -> const string &