24#ifndef MYSQL_UUIDS_UUID_H
25#define MYSQL_UUIDS_UUID_H
55 static constexpr std::array<std::size_t, section_count>
section_sizes = {
65 [[nodiscard]]
const char *
data()
const {
return m_data.data(); }
69 if (&other ==
this)
return;
75 const std::string_view &other) {
77 memcpy(
data(), other.data(),
size());
86static_assert(std::is_trivially_default_constructible_v<Uuid>);
87static_assert(std::is_trivially_copyable_v<Uuid>);
88static_assert(std::is_standard_layout_v<Uuid>);
95template <Is_
string_target Target_t>
102 const auto *data = uuid.data();
103 const auto *data_pos = data;
104 [[maybe_unused]]
auto *target_start_pos = target.pos();
107 target.write_char(
'-');
113 assert(data_pos == uuid.end());
125 auto *out = uuid.data();
129 auto read_hex = [&](std::size_t
size) {
143 enum { yes, no, unknown } hyphen_format = brace_format ? yes : unknown;
146 for (
const auto §ion_size : Uuid_t::section_sizes) {
148 if (hyphen_format == unknown) {
151 }
else if (hyphen_format == yes) {
156 if (read_hex(section_size) != return_ok)
return;
167 target.write_raw(uuid.string_view());
CRTP base class that provides a rich API for classes that behave like byte buffers.
Definition: buffer_interface.h:102
Object used to parse strings.
Definition: parser.h:69
Return_status_t read_to_out_str(const Is_parse_options_nocheck auto &opt, const Is_out_str auto &out_str)
Read from this object to the given Output String Wrapper, using a decode_impl function that takes an ...
Definition: parser.h:317
void skip(const Is_parse_options_optional auto &opt, const std::string_view &sv)
Skip occurrences of the literal string sv, if found.
Definition: parser.h:125
static Repeat exact(std::integral auto count)
Return a Repeat object representing exactly the given number of repetitions.
Definition: repeat.h:163
bool is_found() const
Return true if found_count() != 0.
Definition: parse_result.h:118
static Repeat_optional optional()
Return a Repeat_optional object representing zero or one instances.
Definition: repeat.h:52
Holds data for a UUID.
Definition: uuid.h:49
static constexpr std::array< std::size_t, section_count > section_sizes
Definition: uuid.h:55
static constexpr std::size_t text_size
Definition: uuid.h:53
std::array< char, byte_size > m_data
The data for this Uuid.
Definition: uuid.h:83
static constexpr std::size_t byte_size
The number of bytes in the data of a Uuid.
Definition: uuid.h:52
void assign(const Uuid &other)
Copy other to this.
Definition: uuid.h:68
mysql::utils::Return_status assign(const std::string_view &other)
Copy other, which is represented as binary, to this.
Definition: uuid.h:74
static constexpr std::size_t section_count
Definition: uuid.h:54
char * data()
Return the data buffer as char *.
Definition: uuid.h:62
const char * data() const
Return the data buffer as const char *.
Definition: uuid.h:65
constexpr std::size_t size() const
Return the size.
Definition: uuid.h:59
Concept that holds for String_counter and String_writer.
Definition: string_target.h:111
mysql::gtid::Uuid Uuid
Definition: global.h:38
Definition: gtid_binary_format.h:41
auto out_str_fixed_nz(mysql::meta::Is_pointer_to_charlike auto first, Size_t &length, Size_t capacity=0)
Return a wrapper around a non-growable, non-null-terminated output buffer, represented using a raw po...
Definition: out_str.h:818
void decode_impl(const Gtid_binary_format &format, Parser &parser, mysql::gtids::Is_tag auto &tag)
Definition: gtid_binary_format_conv.h:63
void encode_impl(const Gtid_binary_format &format, Is_string_target auto &target, const mysql::gtids::Is_tag auto &tag)
Definition: gtid_binary_format_conv.h:48
Return_status
Simple, strongly-typed enumeration to indicate internal status: ok, error.
Definition: return_status.h:40
size_t size(const char *const c)
Definition: base64.h:46
Format tag to identify text format.
Definition: text_format.h:38