mpc
Haskell-like feature supports in C++
char.hpp
Go to the documentation of this file.
1
2#pragma once
3#include <cctype>
4#include <string>
6#include <mpc/prelude.hpp>
7
8namespace mpc {
9 namespace detail {
10 // See also:
11 // https://en.cppreference.com/w/cpp/string/byte/isalnum
12
13 struct isalnum_op {
14 bool operator()(unsigned char c) const noexcept(noexcept(std::isalnum(c))) {
15 return std::isalnum(c);
16 }
17 };
18
19 struct isalpha_op {
20 bool operator()(unsigned char c) const noexcept(noexcept(std::isalpha(c))) {
21 return std::isalpha(c);
22 }
23 };
24
25 struct islower_op {
26 bool operator()(unsigned char c) const noexcept(noexcept(std::islower(c))) {
27 return std::islower(c);
28 }
29 };
30
31 struct isupper_op {
32 bool operator()(unsigned char c) const noexcept(noexcept(std::isupper(c))) {
33 return std::isupper(c);
34 }
35 };
36
37 struct isdigit_op {
38 bool operator()(unsigned char c) const noexcept(noexcept(std::isdigit(c))) {
39 return std::isdigit(c);
40 }
41 };
42
43 struct isxdigit_op {
44 bool operator()(unsigned char c) const noexcept(noexcept(std::isxdigit(c))) {
45 return std::isxdigit(c);
46 }
47 };
48
49 struct iscntrl_op {
50 bool operator()(unsigned char c) const noexcept(noexcept(std::iscntrl(c))) {
51 return std::iscntrl(c);
52 }
53 };
54
55 struct isgraph_op {
56 bool operator()(unsigned char c) const noexcept(noexcept(std::isgraph(c))) {
57 return std::isgraph(c);
58 }
59 };
60
61 struct isspace_op {
62 bool operator()(unsigned char c) const noexcept(noexcept(std::isspace(c))) {
63 return std::isspace(c);
64 }
65 };
66
67 struct isblank_op {
68 bool operator()(unsigned char c) const noexcept(noexcept(std::isblank(c))) {
69 return std::isblank(c);
70 }
71 };
72
73 struct isprint_op {
74 bool operator()(unsigned char c) const noexcept(noexcept(std::isprint(c))) {
75 return std::isprint(c);
76 }
77 };
78
79 struct ispunct_op {
80 bool operator()(unsigned char c) const noexcept(noexcept(std::ispunct(c))) {
81 return std::ispunct(c);
82 }
83 };
84 } // namespace detail
85
86 inline namespace cpo {
111 } // namespace cpo
112
114 template <class charT>
115 inline std::basic_string<charT> quoted(charT s, charT delim = charT('\'')) {
116 return {delim, s, delim};
117 }
118
120 template <class charT>
121 inline auto quoted(const charT* s, charT delim = charT('"')) {
122 return std::basic_string<charT>{delim} + s + delim;
123 }
124
126 template <class charT, class traits>
127 inline auto quoted(std::basic_string_view<charT, traits> s, charT delim = charT('"')) {
128 return delim + std::basic_string<charT, traits>{s} + delim;
129 }
130
132 template <class charT, class traits, class Allocator>
133 inline auto quoted(const std::basic_string<charT, traits, Allocator>& s,
134 charT delim = charT('"')) {
135 return delim + s + delim;
136 }
137
139 template <class charT, class traits, class Allocator>
140 inline auto quoted(std::basic_string<charT, traits, Allocator>&& s, charT delim = charT('"')) {
141 return delim + std::move(s) + delim;
142 }
143} // namespace mpc
std::basic_string< charT > quoted(charT s, charT delim=charT('\''))
Surrounds a string with delimiter.
Definition: char.hpp:115
constexpr partial< detail::isgraph_op > isgraph
Partially applicable std::isgraph.
Definition: char.hpp:102
constexpr partial< detail::isupper_op > isupper
Partially applicable std::isupper.
Definition: char.hpp:94
constexpr partial< detail::ispunct_op > ispunct
Partially applicable std::ispunct.
Definition: char.hpp:110
constexpr partial< detail::iscntrl_op > iscntrl
Partially applicable std::iscntrl.
Definition: char.hpp:100
constexpr partial< detail::isblank_op > isblank
Partially applicable std::isblank.
Definition: char.hpp:106
constexpr partial< detail::isdigit_op > isdigit
Partially applicable std::isdigit.
Definition: char.hpp:96
constexpr partial< detail::islower_op > islower
Partially applicable std::islower.
Definition: char.hpp:92
constexpr partial< detail::isalnum_op > isalnum
Partially applicable std::isalnum.
Definition: char.hpp:88
constexpr partial< detail::isxdigit_op > isxdigit
Partially applicable std::isxdigit.
Definition: char.hpp:98
constexpr partial< detail::isprint_op > isprint
Partially applicable std::isprint.
Definition: char.hpp:108
constexpr partial< detail::isspace_op > isspace
Partially applicable std::isspace.
Definition: char.hpp:104
constexpr partial< detail::isalpha_op > isalpha
Partially applicable std::isalpha.
Definition: char.hpp:90
Definition: char.hpp:13
Definition: char.hpp:19
Definition: char.hpp:67
Definition: char.hpp:49
Definition: char.hpp:37
Definition: char.hpp:55
Definition: char.hpp:25
Definition: char.hpp:73
Definition: char.hpp:79
Definition: char.hpp:61
Definition: char.hpp:31
Definition: char.hpp:43
Implements a perfect-forwarding call wrapper.
Definition: partial.hpp:63