11 #ifndef PQXX_SEPARATED_LIST_HXX
12 #define PQXX_SEPARATED_LIST_HXX
14 #if !defined(PQXX_HEADER_PRE)
15 # error "Include libpqxx headers as <pqxx/header>, not <pqxx/header.hxx>."
40 template<std::forward_iterator ITER,
typename ACCESS>
42 std::string_view sep, ITER begin, ITER end, ACCESS access,
ctx c = {})
53 std::size_t budget{0};
54 for (ITER cnt{begin}; cnt != end; ++cnt)
57 static_cast<std::size_t
>(std::distance(begin, end)) * std::size(sep);
60 result.resize(budget);
62 char *
const data{result.data()};
63 char *stop{data + budget};
65 for (++begin; begin != end; ++begin)
67 here = pqxx::internal::copy_chars<false>(sep, result, here, sl::current());
76 template<std::forward_iterator ITER>
77 [[nodiscard]]
inline std::string
80 return separated_list(sep, begin, end, [](ITER i) {
return *i; }, c);
85 template<std::ranges::range CONTAINER>
86 [[nodiscard]]
inline std::string
94 template<
typename TUPLE, std::
size_t INDEX = 0,
typename ACCESS>
96 std::string_view sep, TUPLE
const &t, ACCESS
const &access,
ctx c = {})
98 std::string out{
to_string(access(&std::get<INDEX>(t)), c)};
99 if constexpr (INDEX < std::tuple_size<TUPLE>::value - 1)
102 out.append(separated_list<TUPLE, INDEX + 1>(sep, t, access, c));
107 template<
typename TUPLE, std::
size_t INDEX = 0>
108 [[nodiscard]]
inline std::string
111 return separated_list(sep, t, [](TUPLE
const &tup) {
return *tup; }, c);
The home of all libpqxx classes, functions, templates, etc.
Definition: array.cxx:26
PQXX_LIBEXPORT std::string to_string(field_ref const &value, ctx)
Convert a field_ref to a string.
Definition: field.hxx:891
constexpr std::size_t size_buffer(TYPE const &...value) noexcept
Estimate how much buffer space is needed to represent values as a string.
Definition: strconv.hxx:399
std::string separated_list(std::string_view sep, ITER begin, ITER end, ACCESS access, ctx c={})
Represent sequence of values as a string, joined by a given separator.
Definition: separated_list.hxx:41
std::size_t into_buf(std::span< char > buf, TYPE const &value, ctx c={})
Write an SQL representation of value into buf.
Definition: strconv.hxx:454
conversion_context const & ctx
Convenience alias: const reference to a pqxx::conversion_context.
Definition: strconv.hxx:201