11 #ifndef PQXX_H_BINARYSTRING
12 #define PQXX_H_BINARYSTRING
14 #include "pqxx/compiler-public.hxx"
15 #include "pqxx/internal/compiler-internal-pre.hxx"
19 #include <string_view>
21 #include "pqxx/result.hxx"
22 #include "pqxx/strconv.hxx"
27 template<>
struct string_traits<binarystring>;
60 using value_type = std::char_traits<char_type>::char_type;
88 m_buf{std::move(ptr)}, m_size{size}
95 [[nodiscard]]
bool empty() const noexcept {
return size() == 0; }
105 return *(data() + m_size - 1);
127 [[nodiscard]] PQXX_PURE
bool operator==(
binarystring const &)
const noexcept;
130 return not operator==(rhs);
145 [[nodiscard]]
char const *
get() const noexcept
147 return reinterpret_cast<char const *
>(m_buf.get());
151 [[nodiscard]] std::string_view
view() const noexcept
153 return std::string_view(get(), size());
162 [[nodiscard]] std::string str()
const;
165 std::shared_ptr<value_type> m_buf;
191 auto const value_end{
into_buf(begin, end, value)};
192 return zview{begin, value_end - begin - 1};
198 if (
static_cast<std::size_t
>(end - begin) < budget)
200 "Not enough buffer space to escape binary data."};
202 return begin + budget;
208 std::shared_ptr<unsigned char> buf{
209 new unsigned char[size], [](
unsigned char const *x) {
delete[] x; }};
216 #include "pqxx/internal/compiler-internal-post.hxx"
bool empty() const noexcept
Definition: binarystring.hxx:95
const_iterator cbegin() const noexcept
Definition: binarystring.hxx:98
Traits describing a type's "null value," if any.
Definition: strconv.hxx:87
const_reverse_iterator crbegin() const
Definition: binarystring.hxx:112
The home of all libpqxx classes, functions, templates, etc.
Definition: array.hxx:26
std::string str() const
Read as regular C++ string (may include null characters).
Definition: binarystring.cxx:100
binarystring(binarystring const &)=default
std::string to_string(field const &value)
Convert a field to a string.
Definition: result.cxx:499
static char * into_buf(char *begin, char *end, binarystring const &value)
Definition: binarystring.hxx:195
void unesc_bin(std::string_view escaped_data, std::byte buffer[])
Reconstitute binary data from its escaped version.
Definition: util.cxx:152
std::string_view view() const noexcept
Read contents as a std::string_view.
Definition: binarystring.hxx:151
bool operator!=(binarystring const &rhs) const noexcept
Definition: binarystring.hxx:128
size_type size() const noexcept
Size of converted string in bytes.
Definition: binarystring.hxx:92
Traits class for use in string conversions.
Definition: strconv.hxx:127
std::size_t size_type
Definition: binarystring.hxx:61
Binary data corresponding to PostgreSQL's "BYTEA" binary-string type.
Definition: binarystring.hxx:57
PQXX_PURE char const * c_str() const
Read as plain C string.
Definition: field.cxx:60
Reference to a field in a result set.
Definition: field.hxx:34
const_iterator begin() const noexcept
Definition: binarystring.hxx:97
static binarystring from_string(std::string_view text)
Definition: binarystring.hxx:205
const_reference front() const noexcept
Definition: binarystring.hxx:102
PQXX_PURE bool operator==(binarystring const &) const noexcept
Definition: binarystring.cxx:65
Nullness traits describing a type which does not have a null value.
Definition: strconv.hxx:109
long difference_type
Definition: binarystring.hxx:62
Could not convert value to string: not enough buffer space.
Definition: except.hxx:186
constexpr std::size_t size_esc_bin(std::size_t binary_bytes) noexcept
Compute buffer size needed to escape binary data for use as a BYTEA.
Definition: util.hxx:269
std::char_traits< char_type >::char_type value_type
Definition: binarystring.hxx:60
constexpr std::size_t size_unesc_bin(std::size_t escaped_bytes) noexcept
Compute binary size from the size of its escaped version.
Definition: util.hxx:278
value_type const & const_reference
Definition: binarystring.hxx:63
const_reference back() const noexcept
Definition: binarystring.hxx:103
static zview to_buf(char *begin, char *end, binarystring const &value)
Definition: binarystring.hxx:189
unsigned char char_type
Definition: binarystring.hxx:59
binarystring & operator=(binarystring const &)
const_reference operator[](size_type i) const noexcept
Definition: binarystring.hxx:122
const_reference at(size_type) const
Index contained string, checking for valid index.
Definition: binarystring.cxx:75
std::reverse_iterator< const_iterator > const_reverse_iterator
Definition: binarystring.hxx:66
const_reverse_iterator rend() const
Definition: binarystring.hxx:113
value_type const * const_pointer
Definition: binarystring.hxx:64
static char * into_buf(char *begin, char *end, TYPE const &value)
Write value's string representation into buffer at begin.
const_reverse_iterator crend() const
Definition: binarystring.hxx:117
value_type const * data() const noexcept
Unescaped field contents.
Definition: binarystring.hxx:120
const_pointer const_iterator
Definition: binarystring.hxx:65
Marker-type wrapper: zero-terminated std::string_view.
Definition: zview.hxx:38
binarystring(std::shared_ptr< value_type > ptr, size_type size)
Efficiently wrap a buffer of binary data in a binarystring.
Definition: binarystring.hxx:87
char const * get() const noexcept
Raw character buffer (no terminating zero is added).
Definition: binarystring.hxx:145
const_reverse_iterator rbegin() const
Definition: binarystring.hxx:108
const_iterator end() const noexcept
Definition: binarystring.hxx:99
void swap(binarystring &)
Swap contents with other binarystring.
Definition: binarystring.cxx:89
void esc_bin(std::string_view binary_data, char buffer[]) noexcept
Hex-escape binary data into a buffer.
Definition: util.cxx:122
static std::size_t size_buffer(binarystring const &value) noexcept
Definition: binarystring.hxx:184
size_type length() const noexcept
Size of converted string in bytes.
Definition: binarystring.hxx:94
const_iterator cend() const noexcept
Definition: binarystring.hxx:100
static std::size_t size_buffer(TYPE const &value) noexcept
Estimate how much buffer space is needed to represent value.