A protobuf encoder that writes directly to a provided buffer in memory.
MemoryEncoder objects use the final destination buffer directly rather than relying on a separate scratch buffer. The kMaxEncodedSizeBytes constant generated for messages takes into account the overhead required for nesting submessages. If you calculate the buffer size yourself, your destination buffer might need additional space to accommodate length prefix patching.
encoder.WriteUint32(kMagicNumberField, 0x1a1a2b2b);
encoder.WriteString(kFavoriteFood, "cookies");
return encoder.status_with_size();
}
Definition: status_with_size.h:51
Definition: encoder.h:1056
- Note
- In a context where you need to provide an encoder reference as a function argument and you don't know the consumers, you may prefer
StreamEncoder over MemoryEncoder because it's more generic. However, in a context where you only operate on buffers, MemoryEncoder (and BufferEncoder) have noticeable performance and code size benefits over StreamEncoder.
- See also
- If you need to avoid scratch buffers or reduce copying of nested submessages, consider using
BufferEncoder rather than MemoryEncoder.
|
| constexpr | MemoryEncoder (ByteSpan dest) |
| |
| | ~MemoryEncoder ()=default |
| |
|
| MemoryEncoder (const MemoryEncoder &other)=delete |
| |
|
MemoryEncoder & | operator= (const MemoryEncoder &other)=delete |
| |
|
MemoryEncoder & | operator= (MemoryEncoder &&other)=delete |
| |
|
const std::byte * | data () const |
| |
|
size_t | size () const |
| |
|
const std::byte * | begin () const |
| |
|
const std::byte * | end () const |
| |
|
StatusWithSize | status_with_size () const |
| |
| constexpr | StreamEncoder (stream::Writer &writer, ByteSpan scratch_buffer) |
| |
| | StreamEncoder (stream::CountingNullStream &counting_stream) |
| |
| | ~StreamEncoder () |
| |
|
StreamEncoder & | operator= (const StreamEncoder &other)=delete |
| |
|
| StreamEncoder (const StreamEncoder &other)=delete |
| |
|
StreamEncoder & | operator= (StreamEncoder &&other)=delete |
| |
| void | CloseEncoder () |
| |
| size_t | ConservativeWriteLimit () const |
| |
| StreamEncoder | GetNestedEncoder (uint32_t field_number, EmptyEncoderBehavior empty_encoder_behavior=EmptyEncoderBehavior::kWriteFieldNumber) |
| |
| Status | WriteNestedMessage (uint32_t field_number, FunctionRef< Status(StreamEncoder &)> write_message, EmptyEncoderBehavior empty_encoder_behavior=EmptyEncoderBehavior::kWriteFieldNumber) |
| |
| Status | status () const |
| |
| Status | WriteUint32 (uint32_t field_number, uint32_t value) |
| |
| Status | WritePackedUint32 (uint32_t field_number, span< const uint32_t > values) |
| |
| template<typename T , typename = std::enable_if_t<std::is_enum_v<T>>> |
| Status | WritePackedEnum (uint32_t field_number, span< const T > values) |
| |
| Status | WriteRepeatedUint32 (uint32_t field_number, const pw::Vector< uint32_t > &values) |
| |
| Status | WriteUint64 (uint32_t field_number, uint64_t value) |
| |
| Status | WritePackedUint64 (uint32_t field_number, span< const uint64_t > values) |
| |
| Status | WriteRepeatedUint64 (uint32_t field_number, const pw::Vector< uint64_t > &values) |
| |
| Status | WriteInt32 (uint32_t field_number, int32_t value) |
| |
| Status | WritePackedInt32 (uint32_t field_number, span< const int32_t > values) |
| |
| Status | WriteRepeatedInt32 (uint32_t field_number, const pw::Vector< int32_t > &values) |
| |
| Status | WriteInt64 (uint32_t field_number, int64_t value) |
| |
| Status | WritePackedInt64 (uint32_t field_number, span< const int64_t > values) |
| |
| Status | WriteRepeatedInt64 (uint32_t field_number, const pw::Vector< int64_t > &values) |
| |
| Status | WriteSint32 (uint32_t field_number, int32_t value) |
| |
| Status | WritePackedSint32 (uint32_t field_number, span< const int32_t > values) |
| |
| Status | WriteRepeatedSint32 (uint32_t field_number, const pw::Vector< int32_t > &values) |
| |
| Status | WriteSint64 (uint32_t field_number, int64_t value) |
| |
| Status | WritePackedSint64 (uint32_t field_number, span< const int64_t > values) |
| |
| Status | WriteRepeatedSint64 (uint32_t field_number, const pw::Vector< int64_t > &values) |
| |
| Status | WriteBool (uint32_t field_number, bool value) |
| |
| Status | WritePackedBool (uint32_t field_number, span< const bool > values) |
| |
| Status | WriteRepeatedBool (uint32_t field_number, const pw::Vector< bool > &values) |
| |
| Status | WriteFixed32 (uint32_t field_number, uint32_t value) |
| |
| Status | WritePackedFixed32 (uint32_t field_number, span< const uint32_t > values) |
| |
| Status | WriteRepeatedFixed32 (uint32_t field_number, const pw::Vector< uint32_t > &values) |
| |
| Status | WriteFixed64 (uint32_t field_number, uint64_t value) |
| |
| Status | WritePackedFixed64 (uint32_t field_number, span< const uint64_t > values) |
| |
| Status | WriteRepeatedFixed64 (uint32_t field_number, const pw::Vector< uint64_t > &values) |
| |
| Status | WriteSfixed32 (uint32_t field_number, int32_t value) |
| |
| Status | WritePackedSfixed32 (uint32_t field_number, span< const int32_t > values) |
| |
| Status | WriteRepeatedSfixed32 (uint32_t field_number, const pw::Vector< int32_t > &values) |
| |
| Status | WriteSfixed64 (uint32_t field_number, int64_t value) |
| |
| Status | WritePackedSfixed64 (uint32_t field_number, span< const int64_t > values) |
| |
| Status | WriteRepeatedSfixed64 (uint32_t field_number, const pw::Vector< int64_t > &values) |
| |
| Status | WriteFloat (uint32_t field_number, float value) |
| |
| Status | WritePackedFloat (uint32_t field_number, span< const float > values) |
| |
| Status | WriteRepeatedFloat (uint32_t field_number, const pw::Vector< float > &values) |
| |
| Status | WriteDouble (uint32_t field_number, double value) |
| |
| Status | WritePackedDouble (uint32_t field_number, span< const double > values) |
| |
| Status | WriteRepeatedDouble (uint32_t field_number, const pw::Vector< double > &values) |
| |
| Status | WriteBytes (uint32_t field_number, ConstByteSpan value) |
| |
| Status | WriteBytes (uint32_t field_number, size_t num_bytes, FunctionRef< Status(stream::Writer &)> write_func) |
| |
| Status | WriteBytesFromStream (uint32_t field_number, stream::Reader &bytes_reader, size_t num_bytes, ByteSpan stream_pipe_buffer) |
| |
| Status | WriteString (uint32_t field_number, std::string_view value) |
| |
| Status | WriteString (uint32_t field_number, const char *value, size_t len) |
| |
| Status | WriteStringFromStream (uint32_t field_number, stream::Reader &bytes_reader, size_t num_bytes, ByteSpan stream_pipe_buffer) |
| |