26#ifndef MYSQL_ROUTER_CLASSIC_PROTOCOL_CODEC_BASE_H_ 
   27#define MYSQL_ROUTER_CLASSIC_PROTOCOL_CODEC_BASE_H_ 
   32#include <system_error>   
   83template <
class T, 
class DynamicBuffer>
 
   86                                               DynamicBuffer &&dyn_buffer) {
 
   92  const auto orig_size = dyn_buffer.size();
 
   93  const auto codec_size = codec.size();
 
   96  dyn_buffer.grow(codec_size);
 
   98  const auto res = codec.encode(dyn_buffer.data(orig_size, codec_size));
 
  100    dyn_buffer.shrink(codec_size);
 
  104  dyn_buffer.shrink(codec_size - res.value());
 
  136template <
class T, 
class... Args>
 
  186    auto step_res = step_<T>(sz);
 
  230      if (
buf.size() < sz) {
 
  239    return decode_res->second;
 
  284    if (!
res_) 
return *
this;
 
  375  constexpr size_t size() const noexcept {
 
  376    return static_cast<const T *
>(
this)->accumulate_fields(
 
  382    return static_cast<const T *
>(
this)->accumulate_fields(
 
Codec for a type.
Definition: classic_protocol_codec_base.h:72
 
Generator of decoded Types of a buffer.
Definition: classic_protocol_codec_base.h:150
 
stdx::expected< typename Codec< T >::value_type, std::error_code > step_(size_t sz)
Definition: classic_protocol_codec_base.h:224
 
net::const_buffer buffer_
Definition: classic_protocol_codec_base.h:242
 
const capabilities::value_type caps_
Definition: classic_protocol_codec_base.h:243
 
result_type res_
Definition: classic_protocol_codec_base.h:246
 
DecodeBufferAccumulator(const net::const_buffer &buffer, capabilities::value_type caps, size_t consumed=0)
construct a DecodeBufferAccumulator.
Definition: classic_protocol_codec_base.h:162
 
size_t consumed_
Definition: classic_protocol_codec_base.h:244
 
stdx::expected< typename Codec< T >::value_type, std::error_code > try_step(size_t sz=std::numeric_limits< size_t >::max())
try decoding a Type from the buffer sequence.
Definition: classic_protocol_codec_base.h:202
 
result_type result() const
get result of the step().
Definition: classic_protocol_codec_base.h:216
 
stdx::expected< typename Codec< T >::value_type, std::error_code > step(size_t sz=std::numeric_limits< size_t >::max())
decode a Type from the buffer sequence.
Definition: classic_protocol_codec_base.h:182
 
CRTP base for the Codec's encode part.
Definition: classic_protocol_codec_base.h:371
 
stdx::expected< size_t, std::error_code > encode(net::mutable_buffer buffer) const
Definition: classic_protocol_codec_base.h:380
 
constexpr size_t size() const noexcept
Definition: classic_protocol_codec_base.h:375
 
constexpr capabilities::value_type caps() const noexcept
Definition: classic_protocol_codec_base.h:386
 
const capabilities::value_type caps_
Definition: classic_protocol_codec_base.h:389
 
constexpr EncodeBase(capabilities::value_type caps)
Definition: classic_protocol_codec_base.h:373
 
accumulator of encoded buffers.
Definition: classic_protocol_codec_base.h:262
 
result_type result() const
get result the steps().
Definition: classic_protocol_codec_base.h:302
 
EncodeBufferAccumulator & step(const T &v)
encode a T into the buffer and move position forward.
Definition: classic_protocol_codec_base.h:283
 
EncodeBufferAccumulator(net::mutable_buffer buffer, capabilities::value_type caps, size_t consumed=0)
construct a encode-buffer-accumulator.
Definition: classic_protocol_codec_base.h:273
 
const net::mutable_buffer buffer_
Definition: classic_protocol_codec_base.h:309
 
const capabilities::value_type caps_
Definition: classic_protocol_codec_base.h:310
 
result_type res_
Definition: classic_protocol_codec_base.h:313
 
size_t consumed_
Definition: classic_protocol_codec_base.h:311
 
accumulates the sizes of encoded T's.
Definition: classic_protocol_codec_base.h:329
 
constexpr result_type result() const
Definition: classic_protocol_codec_base.h:354
 
constexpr EncodeSizeAccumulator(capabilities::value_type caps)
construct a EncodeSizeAccumulator.
Definition: classic_protocol_codec_base.h:336
 
size_t result_type
Definition: classic_protocol_codec_base.h:331
 
size_t consumed_
Definition: classic_protocol_codec_base.h:357
 
const capabilities::value_type caps_
Definition: classic_protocol_codec_base.h:358
 
constexpr EncodeSizeAccumulator & step(const T &v) noexcept
accumulate the size() of encoded T.
Definition: classic_protocol_codec_base.h:345
 
constexpr const error_type & error() const &
Definition: expected.h:755
 
#define T
Definition: jit_executor_value.cc:373
 
Definition: buf0block_hint.cc:30
 
std::bitset< 32 > value_type
Definition: classic_protocol_constants.h:73
 
Definition: classic_protocol_binary.h:39
 
stdx::expected< size_t, std::error_code > encode(const T &v, capabilities::value_type caps, DynamicBuffer &&dyn_buffer)
encode a message into a dynamic buffer.
Definition: classic_protocol_codec_base.h:84
 
std::error_code make_error_code(codec_errc e) noexcept
Definition: classic_protocol_codec_error.h:86
 
stdx::expected< std::pair< size_t, T >, std::error_code > decode(const net::const_buffer &buffer, capabilities::value_type caps)
decode a message from a buffer.
Definition: classic_protocol_codec_base.h:119
 
constexpr size_t bytes_per_bits(size_t bits)
Definition: classic_protocol_codec_base.h:55
 
stdx::expected< std::pair< size_t, T >, std::error_code > decode(const net::const_buffer &buffer, capabilities::value_type caps, Args &&...args)
decode a message from a buffer.
Definition: classic_protocol_codec_base.h:137
 
Definition: http_server_component.cc:34
 
ValueType max(X &&first)
Definition: gtid.h:103
 
mutable_buffer buffer(void *p, size_t n) noexcept
Definition: buffer.h:418
 
unexpected(E) -> unexpected< E >