11 #ifndef PQXX_ZVIEW_HXX
12 #define PQXX_ZVIEW_HXX
16 #include <string_view>
17 #include <type_traits>
34 (std::is_convertible_v<std::remove_cvref_t<T>,
char const *> or
35 std::is_convertible_v<std::remove_cvref_t<T>,
zview> or
36 std::is_convertible_v<T, std::string const &>) and
37 not std::is_convertible_v<T, std::nullptr_t>;
65 noexcept(std::string_view{
text,
static_cast<std::size_t
>(len)})) :
66 std::string_view{
text, static_cast<std::size_t>(len)}
72 constexpr
zview(
char text[], std::ptrdiff_t len) noexcept(
73 noexcept(std::string_view{
text,
static_cast<std::size_t
>(len)})) :
74 std::string_view{
text, static_cast<std::size_t>(len)}
83 explicit constexpr
zview(std::string_view other) noexcept :
84 std::string_view{other}
98 template<
typename... Args>
99 explicit constexpr
zview(Args &&...args) :
100 std::string_view(std::forward<Args>(args)...)
113 constexpr
zview(std::string
const &str) noexcept :
114 std::string_view{str.c_str(), str.size()}
125 noexcept(std::string_view{str})) :
126 std::string_view{str}
142 template<
size_t size>
144 zview(literal, size - 1)
150 [[nodiscard]] constexpr
char const *
c_str() const & noexcept
157 constexpr
operator char const *()
const noexcept {
return data(); }
163 return std::string_view{*
this} == std::string_view{rhs};
168 return std::string_view{*
this} != std::string_view{rhs};
173 [[maybe_unused]] constexpr
void invariant() const noexcept
175 assert(std::data(*
this) !=
nullptr);
176 assert(std::data(*
this)[std::size(*
this)] ==
'\0');
183 return "pqxx::zview";
196 operator""_zv(
char const str[], std::size_t len) noexcept
198 return zview{str, len};
205 return std::string_view{lhs} == std::string_view{rhs};
212 return std::string_view{lhs} != std::string_view{rhs};
218 template<>
inline constexpr
bool std::ranges::enable_view<pqxx::zview>{
true};
223 inline constexpr
bool std::ranges::enable_borrowed_range<pqxx::zview>{
true};
Marker-type wrapper: zero-terminated std::string_view.
Definition: zview.hxx:55
constexpr zview() noexcept
Default constructor produces a zero-terminated empty string.
Definition: zview.hxx:58
constexpr char const * c_str() const &noexcept
Return as C string.
Definition: zview.hxx:150
constexpr PQXX_ZARGS zview(char const str[]) noexcept(noexcept(std::string_view{str}))
Construct a zview from a C-style string.
Definition: zview.hxx:124
constexpr zview(Args &&...args)
Construct from any initialiser you might use for std::string_view.
Definition: zview.hxx:99
constexpr PQXX_ZARGS zview(char const (&literal)[size])
Construct a zview from a string literal.
Definition: zview.hxx:143
zview(std::nullptr_t)=delete
constexpr PQXX_ZARGS zview(char const text[], std::ptrdiff_t len) noexcept(noexcept(std::string_view{text, static_cast< std::size_t >(len)}))
Convenience overload: construct using pointer and signed length.
Definition: zview.hxx:64
constexpr zview(char text[], std::ptrdiff_t len) noexcept(noexcept(std::string_view{text, static_cast< std::size_t >(len)}))
Convenience overload: construct using pointer and signed length.
Definition: zview.hxx:72
constexpr bool operator!=(zview const &rhs) const noexcept
Disambiguating comparison operator: leave it to std::string_view.
Definition: zview.hxx:166
constexpr zview(std::string_view other) noexcept
Explicitly promote a string_view to a zview.
Definition: zview.hxx:83
constexpr zview(std::string const &str) noexcept
Definition: zview.hxx:113
constexpr bool operator==(zview const &rhs) const noexcept
Disambiguating comparison operator: leave it to std::string_view.
Definition: zview.hxx:161
The home of all libpqxx classes, functions, templates, etc.
Definition: array.cxx:26
constexpr bool operator!=(char const lhs[], pqxx::zview rhs) noexcept
Disambiguating comparison operator: leave it to std::string_view.
Definition: zview.hxx:210
concept ZString
Concept: T is a known zero-terminated string type.
Definition: zview.hxx:33
constexpr std::string_view name_type< zview >() noexcept
Definition: zview.hxx:181
constexpr bool operator==(char const lhs[], pqxx::zview rhs) noexcept
Disambiguating comparison operator: leave it to std::string_view.
Definition: zview.hxx:203