20#include "pw_polyfill/standard.h"
21#include "pw_preprocessor/util.h"
22#include "pw_tokenizer/internal/argument_types.h"
29#include "pw_polyfill/standard.h"
30#include "pw_span/span.h"
31#include "pw_tokenizer/config.h"
32#include "pw_tokenizer/tokenize.h"
34namespace pw::tokenizer {
39constexpr size_t ArgEncodedSizeBytes() {
40 constexpr pw_tokenizer_ArgTypes kType = VarargsType<T>();
41 if constexpr (kType == PW_TOKENIZER_ARG_TYPE_DOUBLE) {
43 }
else if constexpr (kType == PW_TOKENIZER_ARG_TYPE_STRING) {
45 }
else if constexpr (kType == PW_TOKENIZER_ARG_TYPE_INT64) {
47 }
else if constexpr (kType == PW_TOKENIZER_ARG_TYPE_INT) {
50 static_assert(
sizeof(T) !=
sizeof(T),
"Unsupported argument type");
72template <
typename... ArgTypes>
75 internal::ArgEncodedSizeBytes<ArgTypes>());
108template <
size_t kMaxSizeBytes>
113 pw_tokenizer_ArgTypes types,
115 std::memcpy(data_, &token,
sizeof(token));
122 const std::byte*
data()
const {
return data_; }
126 return reinterpret_cast<const uint8_t*
>(
data());
130 size_t size()
const {
return size_; }
134 "The encoding buffer must be at least large enough for a token "
137 std::byte data_[kMaxSizeBytes];
156 size_t output_buffer_size);
162 size_t output_size_bytes) {
171 size_t output_size_bytes) {
Definition: span_impl.h:235
Definition: encode_args.h:109
const std::byte * data() const
The binary-encoded tokenized message.
Definition: encode_args.h:122
size_t size() const
The size of the encoded tokenized message in bytes.
Definition: encode_args.h:130
const uint8_t * data_as_uint8() const
Returns data() as a pointer to uint8_t instead of std::byte.
Definition: encode_args.h:125
size_t pw_tokenizer_EncodeArgs(pw_tokenizer_ArgTypes types, va_list args, void *output_buffer, size_t output_buffer_size)
uint32_t pw_tokenizer_Token
Definition: tokenize.h:41
size_t EncodeArgs(pw_tokenizer_ArgTypes types, va_list args, span< std::byte > output)
static size_t pw_tokenizer_EncodeInt(int value, void *output, size_t output_size_bytes)
Definition: encode_args.h:160
static size_t pw_tokenizer_EncodeInt64(int64_t value, void *output, size_t output_size_bytes)
Definition: encode_args.h:169
constexpr size_t MinEncodingBufferSizeBytes()
Definition: encode_args.h:73
size_t pw_varint_Encode64(uint64_t integer, void *output, size_t output_size_bytes)
static uint32_t pw_varint_ZigZagEncode32(int32_t n)
Zig-zag encodes an int32_t, returning it as a uint32_t.
Definition: varint.h:65
size_t pw_varint_Encode32(uint32_t integer, void *output, size_t output_size_bytes)
static uint64_t pw_varint_ZigZagEncode64(int64_t n)
Zig-zag encodes an int64_t, returning it as a uint64_t.
Definition: varint.h:70