24#ifndef MYSQL_STRCONV_ENCODE_OUT_STR_WRITE_H
25#define MYSQL_STRCONV_ENCODE_OUT_STR_WRITE_H
41inline auto nop = [] {};
53 std::is_invocable_r_v<void, Test, String_counter &> ||
54 std::is_invocable_r_v<mysql::utils::Return_status, Test, String_counter &>;
60 std::is_invocable_r_v<void, Test, String_writer &> ||
61 std::is_invocable_r_v<mysql::utils::Return_status, Test, String_writer &>;
69template <
class Counter,
class Writer>
93template <
Is_out_str Out_str_t,
class Producer_counter_t,
94 class Producer_writer_t, std::invocable Oom_action_t>
97 const Out_str_t &out_str,
const Producer_counter_t &producer_counter,
98 const Producer_writer_t &producer_writer,
const Oom_action_t &oom_action) {
103 [[maybe_unused]] std::size_t old_size{};
106 size = out_str.initial_capacity();
107 old_size = out_str.size();
129 if (ret != Return_status::ok) {
131 out_str.resize(old_size);
135 out_str.resize(
writer.pos() - out_str.data());
139 assert(ret == Return_status::ok);
141 return Return_status::ok;
175template <Is_out_str Out_str_t,
class Producer_counter_t,
176 class Producer_writer_t, std::invocable Oom_action_t =
detail::Nop_t>
177 requires Is_string_producer_pair<Producer_counter_t, Producer_writer_t>
179 const Out_str_t &out_str,
const Producer_counter_t &producer_counter,
180 const Producer_writer_t &producer_writer,
213template <Is_out_str_fixed Out_str_t,
class Producer_counter_t,
214 class Producer_writer_t, std::invocable Oom_action_t =
detail::Nop_t>
215 requires Is_string_producer_pair<Producer_counter_t, Producer_writer_t> &&
217 std::invoke_result_t<Producer_counter_t, String_counter &>,
220 std::invoke_result_t<Producer_writer_t, String_writer &>,
void>)
222 const Producer_counter_t &producer_counter,
223 const Producer_writer_t &producer_writer,
224 const Oom_action_t &oom_action =
detail::
nop) {
225 [[maybe_unused]]
auto ret =
245template <std::invocable Oom_action_t = detail::Nop_t>
249 return out_str_write(out_str, producer, producer, oom_action);
265template <std::invocable Oom_action_t = detail::Nop_t>
267 const std::string_view &sv,
String_counter subclass that can be instantiated.
Definition: string_counter.h:97
String_writer subclass that can be instantiated.
Definition: string_writer.h:182
True if Test is an Output String Wrapper, i.e., derived from Out_str_base.
Definition: out_str.h:219
True if Test can be invoked with a String_counter & argument and returns void or Return_status.
Definition: out_str_write.h:52
True for pairs of string producer counters/writers that can be used with out_str_write,...
Definition: out_str_write.h:70
True if Test can be invoked with a String_writer & argument and returns void or Return_status.
Definition: out_str_write.h:59
True for invocables that can be used with out_str_write, i.e., which accept either a String_writer & ...
Definition: out_str_write.h:88
Concept that holds for String_counter and String_writer.
Definition: string_target.h:111
void error(const char *format,...)
uint counter
Definition: mysqlimport.cc:58
Definition: fts0fts.cc:236
Definition: gtid_binary_format_conv.h:252
mysql::utils::Return_status do_out_str_write(const Out_str_t &out_str, const Producer_counter_t &producer_counter, const Producer_writer_t &producer_writer, const Oom_action_t &oom_action)
Common implementation for the two overloads of out_str_write(out_str, producer_counter,...
Definition: out_str_write.h:96
auto nop
Lambda that takes no argument, does nothing, and returns void.
Definition: out_str_write.h:41
decltype(nop) Nop_t
Type of nop.
Definition: out_str_write.h:44
Definition: gtid_binary_format.h:41
auto out_str_copy(const Is_out_str auto &out_str, const std::string_view &sv, const Oom_action_t &oom_action=detail::nop)
Copy the given string_view to the Output String Wrapper, resizing as needed.
Definition: out_str_write.h:266
mysql::utils::Return_status out_str_write(const Out_str_t &out_str, const Producer_counter_t &producer_counter, const Producer_writer_t &producer_writer, const Oom_action_t &oom_action=detail::nop)
Given an Is_out_str object, a String_producer_counter, and a String_producer_writer,...
Definition: out_str_write.h:178
Return_status
Simple, strongly-typed enumeration to indicate internal status: ok, error.
Definition: return_status.h:40
Return_t void_to_ok(const Func_t &func, Args_t &&...args)
Helper that calls the given function and returns its result, or returns Return_status::ok if the func...
Definition: return_status.h:113
size_t size(const char *const c)
Definition: base64.h:46