C/C++ API Reference
Loading...
Searching...
No Matches
pw::protobuf::MemoryEncoder Class Reference

Overview

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.

// Writes a proto response to the provided buffer, returning the encode
// status and number of bytes written.
StatusWithSize WriteProtoResponse(ByteSpan response) {
// All proto writes are directly written to the `response` buffer.
MemoryEncoder encoder(response);
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.
Inheritance diagram for pw::protobuf::MemoryEncoder:
pw::protobuf::StreamEncoder

Public Member Functions

constexpr MemoryEncoder (ByteSpan dest)
 
 ~MemoryEncoder ()=default
 
 MemoryEncoder (const MemoryEncoder &other)=delete
 
MemoryEncoderoperator= (const MemoryEncoder &other)=delete
 
MemoryEncoderoperator= (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
 
- Public Member Functions inherited from pw::protobuf::StreamEncoder
constexpr StreamEncoder (stream::Writer &writer, ByteSpan scratch_buffer)
 
 StreamEncoder (stream::CountingNullStream &counting_stream)
 
 ~StreamEncoder ()
 
StreamEncoderoperator= (const StreamEncoder &other)=delete
 
 StreamEncoder (const StreamEncoder &other)=delete
 
StreamEncoderoperator= (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)
 

Protected Member Functions

 MemoryEncoder (MemoryEncoder &&other)=default
 
- Protected Member Functions inherited from pw::protobuf::StreamEncoder
constexpr StreamEncoder (StreamEncoder &&other)
 
Status Write (span< const std::byte > message, span< const internal::MessageField > table)
 
StreamEncoder GetNestedEncoder (uint32_t field_number, bool write_when_empty)
 

Additional Inherited Members

- Public Types inherited from pw::protobuf::StreamEncoder
enum class  EmptyEncoderBehavior { kWriteFieldNumber , kWriteNothing }
 

Constructor & Destructor Documentation

◆ MemoryEncoder()

constexpr pw::protobuf::MemoryEncoder::MemoryEncoder ( ByteSpan  dest)
inlineconstexpr

Constructs a MemoryEncoder targeting the dest buffer.

Parameters
[in]destThe destination buffer for serialized protobuf data.

◆ ~MemoryEncoder()

pw::protobuf::MemoryEncoder::~MemoryEncoder ( )
default
Precondition
Encoder has no active child encoder.
Postcondition
If this encoder is a nested one, the parent encoder is unlocked and proto encoding may resume on the parent.

The documentation for this class was generated from the following file: