Cppgres
Build Postgres extensions in C++
Loading...
Searching...
No Matches
cstring.hpp
1#include <string>
2#include <string_view>
3
4namespace cppgres::utils {
5
6template <typename T>
7concept is_cstring = std::same_as<T, char *> || std::same_as<T, const char *>;
8
9template <typename T>
10concept c_str_available = requires(T t) {
11 { t.c_str() } -> std::same_as<const char *>;
12};
13
14template <typename T>
15concept data_length_available = requires(T t) {
16 { t.data() } -> std::same_as<const char *>;
17 { t.length() } -> std::same_as<std::size_t>;
19
20template <typename T>
22
23template <is_cstring S> const char *to_cstring(S string) {
24 return const_cast<const char *>(string);
25}
26
27template <c_str_available S> const char *to_cstring(S &&string) { return string.c_str(); }
28
30 owned_cstring(std::string s) : str_(s) {}
31
32 operator const char *() const { return str_.c_str(); }
33
34private:
35 std::string str_;
36};
37
38template <data_length_available S> owned_cstring to_cstring(S &&string) {
39 return std::string(string.data(), string.length());
40}
41
42} // namespace cppgres::utils
Definition: cstring.hpp:10
Definition: cstring.hpp:21
Definition: cstring.hpp:15
Definition: cstring.hpp:7
Definition: cstring.hpp:29