message_lite.h
#include <google/protobuf/message_lite.h>
namespace google::protobuf
Defines MessageLite, the abstract interface implemented by all (lite and non-lite) protocol message objects.
Classes in this file | |
---|---|
Interface to light weight protocol messages. |
File MembersThese definitions are not part of any class. | |
---|---|
void | ShutdownProtobufLibrary() Shut down the entire protocol buffers library, deleting all static-duration objects allocated by the library or by generated .pb.cc files. more... |
void protobuf::ShutdownProtobufLibrary()
Shut down the entire protocol buffers library, deleting all static-duration objects allocated by the library or by generated .pb.cc files.
There are two reasons you might want to call this:
- You use a draconian definition of "memory leak" in which you expect every single malloc() to have a corresponding free(), even for objects which live until program exit.
- You are writing a dynamically-loaded library which needs to clean up after itself when the library is unloaded.
It is safe to call this multiple times. However, it is not safe to use any other part of the protocol buffers library after ShutdownProtobufLibrary() has been called. Furthermore this call is not thread safe, user needs to synchronize multiple calls.
class MessageLite
#include <google/protobuf/message_lite.h>
namespace google::protobuf
Interface to light weight protocol messages.
This interface is implemented by all protocol message objects. Non-lite messages additionally implement the Message interface, which is a subclass of MessageLite. Use MessageLite instead when you only need the subset of features which it supports – namely, nothing that uses descriptors or reflection. You can instruct the protocol compiler to generate classes which implement only MessageLite, not the full Message interface, by adding the following line to the .proto file:
option optimize_for = LITE_RUNTIME;
This is particularly useful on resource-constrained systems where the full protocol buffers runtime library is too big.
Note that on non-constrained systems (e.g. servers) when you need to link in lots of protocol definitions, a better way to reduce total code footprint is to use optimize_for = CODE_SIZE. This will make the generated code smaller while still supporting all the same features (at the expense of speed). optimize_for = LITE_RUNTIME is best when you only have a small number of message types linked into your binary, in which case the size of the protocol buffers runtime itself is the biggest problem.
Users must not derive from this class. Only the protocol compiler and the internal library are allowed to create subclasses.
Known subclasses:
Members | |
---|---|
enum | ParseFlags |
protected internal::InternalMetadata | _internal_metadata_ |
constexpr | MessageLite() |
virtual | ~MessageLite() |
template bool | ParseFrom(const T & input) |
virtual uint8 * | _InternalSerialize(uint8 * ptr, io::EpsCopyOutputStream * stream) const = 0 Fast path when conditions match (ie. more... |
bool | IsInitializedWithErrors() const Identical to IsInitialized() except that it logs an error message. |
protected template static T * | CreateMaybeMessage(Arena * arena) |
protected explicit | MessageLite(Arena * arena) |
protected Arena * | GetOwningArena() const Returns the arena, if any, that directly owns this message and its internal memory (Arena::Own is different in that the arena doesn't directly own the internal memory). more... |
protected Arena * | GetArenaForAllocation() const Returns the arena, used for allocating internal objects(e.g., child messages, etc), or owning incoming objects (e.g., set allocated). |
Basic Operations | |
virtual std::string | GetTypeName() const = 0 Get the name of this message type, e.g. "foo.bar.BazProto". |
virtual MessageLite * | New() const = 0 Construct a new instance of the same type. more... |
virtual MessageLite * | New(Arena * arena) const Construct a new instance on the arena. more... |
Arena * | GetArena() const Same as GetOwningArena. |
void * | GetMaybeArenaPointer() const Get a pointer that may be equal to this message's arena, or may not be. more... |
virtual void | Clear() = 0 Clear all fields of the message and set them to their default values. more... |
virtual bool | IsInitialized() const = 0 Quickly check if all required fields have values set. |
virtual std::string | InitializationErrorString() const This is not implemented for Lite messages – it just returns "(cannot
determine missing fields for lite message)". more... |
virtual void | CheckTypeAndMergeFrom(const MessageLite & other) = 0 If |other| is the exact same class as this, calls MergeFrom(). more... |
std::string | DebugString() const These methods return a human-readable summary of the message. more... |
std::string | ShortDebugString() const |
std::string | Utf8DebugString() const MessageLite::DebugString is already Utf8 Safe. more... |
ParsingMethods for parsing in protocol buffer format. Most of these are just simple wrappers around MergeFromCodedStream(). Clear() will be called before merging the input. | |
PROTOBUF_ATTRIBUTE_REINITIALIZES bool | ParseFromCodedStream(io::CodedInputStream * input) Fill the message with a protocol buffer parsed from the given input stream. more... |
PROTOBUF_ATTRIBUTE_REINITIALIZES bool | ParsePartialFromCodedStream(io::CodedInputStream * input) Like ParseFromCodedStream(), but accepts messages that are missing required fields. |
PROTOBUF_ATTRIBUTE_REINITIALIZES bool | ParseFromZeroCopyStream(io::ZeroCopyInputStream * input) Read a protocol buffer from the given zero-copy input stream. more... |
PROTOBUF_ATTRIBUTE_REINITIALIZES bool | ParsePartialFromZeroCopyStream(io::ZeroCopyInputStream * input) Like ParseFromZeroCopyStream(), but accepts messages that are missing required fields. |
PROTOBUF_ATTRIBUTE_REINITIALIZES bool | ParseFromFileDescriptor(int file_descriptor) Parse a protocol buffer from a file descriptor. more... |
PROTOBUF_ATTRIBUTE_REINITIALIZES bool | ParsePartialFromFileDescriptor(int file_descriptor) Like ParseFromFileDescriptor(), but accepts messages that are missing required fields. |
PROTOBUF_ATTRIBUTE_REINITIALIZES bool | ParseFromIstream(std::istream * input) Parse a protocol buffer from a C++ istream. more... |
PROTOBUF_ATTRIBUTE_REINITIALIZES bool | ParsePartialFromIstream(std::istream * input) Like ParseFromIstream(), but accepts messages that are missing required fields. |
bool | MergePartialFromBoundedZeroCopyStream(io::ZeroCopyInputStream * input, int size) Read a protocol buffer from the given zero-copy input stream, expecting the message to be exactly "size" bytes long. more... |
bool | MergeFromBoundedZeroCopyStream(io::ZeroCopyInputStream * input, int size) Like ParseFromBoundedZeroCopyStream(), but accepts messages that are missing required fields. |
PROTOBUF_ATTRIBUTE_REINITIALIZES bool | ParseFromBoundedZeroCopyStream(io::ZeroCopyInputStream * input, int size) |
PROTOBUF_ATTRIBUTE_REINITIALIZES bool | ParsePartialFromBoundedZeroCopyStream(io::ZeroCopyInputStream * input, int size) Like ParseFromBoundedZeroCopyStream(), but accepts messages that are missing required fields. |
PROTOBUF_ATTRIBUTE_REINITIALIZES bool | ParseFromString(ConstStringParam data) Parses a protocol buffer contained in a string. more... |
PROTOBUF_ATTRIBUTE_REINITIALIZES bool | ParsePartialFromString(ConstStringParam data) Like ParseFromString(), but accepts messages that are missing required fields. |
PROTOBUF_ATTRIBUTE_REINITIALIZES bool | ParseFromArray(const void * data, int size) Parse a protocol buffer contained in an array of bytes. |
PROTOBUF_ATTRIBUTE_REINITIALIZES bool | ParsePartialFromArray(const void * data, int size) Like ParseFromArray(), but accepts messages that are missing required fields. |
bool | MergeFromCodedStream(io::CodedInputStream * input) |
bool | MergePartialFromCodedStream(io::CodedInputStream * input) Like MergeFromCodedStream(), but succeeds even if required fields are missing in the input. more... |
bool | MergeFromString(ConstStringParam data) Merge a protocol buffer contained in a string. |
SerializationMethods for serializing in protocol buffer format. Most of these are just simple wrappers around ByteSize() and SerializeWithCachedSizes(). | |
bool | SerializeToCodedStream(io::CodedOutputStream * output) const Write a protocol buffer of this message to the given output. more... |
bool | SerializePartialToCodedStream(io::CodedOutputStream * output) const Like SerializeToCodedStream(), but allows missing required fields. |
bool | SerializeToZeroCopyStream(io::ZeroCopyOutputStream * output) const Write the message to the given zero-copy output stream. more... |
bool | SerializePartialToZeroCopyStream(io::ZeroCopyOutputStream * output) const Like SerializeToZeroCopyStream(), but allows missing required fields. |
bool | SerializeToString(std::string * output) const Serialize the message and store it in the given string. more... |
bool | SerializePartialToString(std::string * output) const Like SerializeToString(), but allows missing required fields. |
bool | SerializeToArray(void * data, int size) const Serialize the message and store it in the given byte array. more... |
bool | SerializePartialToArray(void * data, int size) const Like SerializeToArray(), but allows missing required fields. |
std::string | SerializeAsString() const Make a string encoding the message. more... |
std::string | SerializePartialAsString() const Like SerializeAsString(), but allows missing required fields. |
bool | SerializeToFileDescriptor(int file_descriptor) const Serialize the message and write it to the given file descriptor. more... |
bool | SerializePartialToFileDescriptor(int file_descriptor) const Like SerializeToFileDescriptor(), but allows missing required fields. |
bool | SerializeToOstream(std::ostream * output) const Serialize the message and write it to the given C++ ostream. more... |
bool | SerializePartialToOstream(std::ostream * output) const Like SerializeToOstream(), but allows missing required fields. |
bool | AppendToString(std::string * output) const Like SerializeToString(), but appends to the data to the string's existing contents. more... |
bool | AppendPartialToString(std::string * output) const Like AppendToString(), but allows missing required fields. |
virtual size_t | ByteSizeLong() const = 0 Computes the serialized size of the message. more... |
int | ByteSize() const Legacy ByteSize() API. |
void | SerializeWithCachedSizes(io::CodedOutputStream * output) const Serializes the message without recomputing the size. more... |
uint8 * | SerializeWithCachedSizesToArray(uint8 * target) const Like SerializeWithCachedSizes, but writes directly to *target, returning a pointer to the byte immediately after the last byte written. more... |
virtual int | GetCachedSize() const = 0 Returns the result of the last call to ByteSize(). more... |
virtual const char * | _InternalParse(const char * , internal::ParseContext * ) |
enum MessageLite::ParseFlags {
kMerge = = 0,
kParse = = 1,
kMergePartial = = 2,
kParsePartial = = 3,
kMergeWithAliasing = = 4,
kParseWithAliasing = = 5,
kMergePartialWithAliasing = = 6,
kParsePartialWithAliasing = = 7
}
kMerge = = 0,
kParse = = 1,
kMergePartial = = 2,
kParsePartial = = 3,
kMergeWithAliasing = = 4,
kParseWithAliasing = = 5,
kMergePartialWithAliasing = = 6,
kParsePartialWithAliasing = = 7
}
kMerge | |
kParse | |
kMergePartial | |
kParsePartial | |
kMergeWithAliasing | |
kParseWithAliasing | |
kMergePartialWithAliasing | |
kParsePartialWithAliasing |
virtual uint8 * MessageLite::_InternalSerialize(
uint8 * ptr,
io::EpsCopyOutputStream * stream) const = 0
uint8 * ptr,
io::EpsCopyOutputStream * stream) const = 0
Fast path when conditions match (ie.
non-deterministic) uint8* _InternalSerialize(uint8* ptr) const;
protected Arena * MessageLite::GetOwningArena() const
Returns the arena, if any, that directly owns this message and its internal memory (Arena::Own is different in that the arena doesn't directly own the internal memory).
This method is used in proto's implementation for swapping, moving and setting allocated, for deciding whether the ownership of this message or its internal memory could be changed.
virtual MessageLite * MessageLite::New() const = 0
Construct a new instance of the same type.
Ownership is passed to the caller.
virtual MessageLite * MessageLite::New(
Arena * arena) const
Arena * arena) const
Construct a new instance on the arena.
Ownership is passed to the caller if arena is a NULL. Default implementation for backwards compatibility.
void * MessageLite::GetMaybeArenaPointer() const
Get a pointer that may be equal to this message's arena, or may not be.
If the value returned by this method is equal to some arena pointer, then this message is on that arena; however, if this message is on some arena, this method may or may not return that arena's pointer. As a tradeoff, this method may be more efficient than GetArena(). The intent is to allow underlying representations that use e.g. tagged pointers to sometimes store the arena pointer directly, and sometimes in a more indirect way, and allow a fastpath comparison against the arena pointer when it's easy to obtain.
virtual void MessageLite::Clear() = 0
Clear all fields of the message and set them to their default values.
Clear() avoids freeing memory, assuming that any memory allocated to hold parts of the message will be needed again to hold the next message. If you actually want to free the memory used by a Message, you must delete it.
virtual std::string MessageLite::InitializationErrorString() const
This is not implemented for Lite messages – it just returns "(cannot determine missing fields for lite message)".
However, it is implemented for full messages. See message.h.
virtual void MessageLite::CheckTypeAndMergeFrom(
const MessageLite & other) = 0
const MessageLite & other) = 0
If |other| is the exact same class as this, calls MergeFrom().
Otherwise, results are undefined (probably crash).
std::string MessageLite::DebugString() const
These methods return a human-readable summary of the message.
Note that since the MessageLite interface does not support reflection, there is very little information that these methods can provide. They are shadowed by methods of the same name on the Message interface which provide much more information. The methods here are intended primarily to facilitate code reuse for logic that needs to interoperate with both full and lite protos.
The format of the returned string is subject to change, so please do not assume it will remain stable over time.
std::string MessageLite::Utf8DebugString() const
MessageLite::DebugString is already Utf8 Safe.
This is to add compatibility with Message.
PROTOBUF_ATTRIBUTE_REINITIALIZES bool
MessageLite::ParseFromCodedStream(
io::CodedInputStream * input)
MessageLite::ParseFromCodedStream(
io::CodedInputStream * input)
Fill the message with a protocol buffer parsed from the given input stream.
Returns false on a read error or if the input is in the wrong format. A successful return does not indicate the entire input is consumed, ensure you call ConsumedEntireMessage() to check that if applicable.
PROTOBUF_ATTRIBUTE_REINITIALIZES bool
MessageLite::ParseFromZeroCopyStream(
io::ZeroCopyInputStream * input)
MessageLite::ParseFromZeroCopyStream(
io::ZeroCopyInputStream * input)
Read a protocol buffer from the given zero-copy input stream.
If successful, the entire input will be consumed.
PROTOBUF_ATTRIBUTE_REINITIALIZES bool
MessageLite::ParseFromFileDescriptor(
int file_descriptor)
MessageLite::ParseFromFileDescriptor(
int file_descriptor)
Parse a protocol buffer from a file descriptor.
If successful, the entire input will be consumed.
PROTOBUF_ATTRIBUTE_REINITIALIZES bool
MessageLite::ParseFromIstream(
std::istream * input)
MessageLite::ParseFromIstream(
std::istream * input)
Parse a protocol buffer from a C++ istream.
If successful, the entire input will be consumed.
bool MessageLite::MergePartialFromBoundedZeroCopyStream(
io::ZeroCopyInputStream * input,
int size)
io::ZeroCopyInputStream * input,
int size)
Read a protocol buffer from the given zero-copy input stream, expecting the message to be exactly "size" bytes long.
If successful, exactly this many bytes will have been consumed from the input.
PROTOBUF_ATTRIBUTE_REINITIALIZES bool
MessageLite::ParseFromString(
ConstStringParam data)
MessageLite::ParseFromString(
ConstStringParam data)
Parses a protocol buffer contained in a string.
Returns true on success. This function takes a string in the (non-human-readable) binary wire format, matching the encoding output by MessageLite::SerializeToString(). If you'd like to convert a human-readable string into a protocol buffer object, see google::protobuf::TextFormat::ParseFromString().
bool MessageLite::MergeFromCodedStream(
io::CodedInputStream * input)
io::CodedInputStream * input)
Reads a protocol buffer from the stream and merges it into this Message.
Singular fields read from the what is already in the Message and repeated fields are appended to those already present.
It is the responsibility of the caller to call input->LastTagWas() (for groups) or input->ConsumedEntireMessage() (for non-groups) after this returns to verify that the message's end was delimited correctly.
ParseFromCodedStream() is implemented as Clear() followed by MergeFromCodedStream().
bool MessageLite::MergePartialFromCodedStream(
io::CodedInputStream * input)
io::CodedInputStream * input)
Like MergeFromCodedStream(), but succeeds even if required fields are missing in the input.
MergeFromCodedStream() is just implemented as MergePartialFromCodedStream() followed by IsInitialized().
bool MessageLite::SerializeToCodedStream(
io::CodedOutputStream * output) const
io::CodedOutputStream * output) const
Write a protocol buffer of this message to the given output.
Returns false on a write error. If the message is missing required fields, this may GOOGLE_CHECK-fail.
bool MessageLite::SerializeToZeroCopyStream(
io::ZeroCopyOutputStream * output) const
io::ZeroCopyOutputStream * output) const
Write the message to the given zero-copy output stream.
All required fields must be set.
bool MessageLite::SerializeToString(
std::string * output) const
std::string * output) const
Serialize the message and store it in the given string.
All required fields must be set.
bool MessageLite::SerializeToArray(
void * data,
int size) const
void * data,
int size) const
Serialize the message and store it in the given byte array.
All required fields must be set.
std::string MessageLite::SerializeAsString() const
Make a string encoding the message.
Is equivalent to calling SerializeToString() on a string and using that. Returns the empty string if SerializeToString() would have returned an error. Note: If you intend to generate many such strings, you may reduce heap fragmentation by instead re-using the same string object with calls to SerializeToString().
bool MessageLite::SerializeToFileDescriptor(
int file_descriptor) const
int file_descriptor) const
Serialize the message and write it to the given file descriptor.
All required fields must be set.
bool MessageLite::SerializeToOstream(
std::ostream * output) const
std::ostream * output) const
Serialize the message and write it to the given C++ ostream.
All required fields must be set.
bool MessageLite::AppendToString(
std::string * output) const
std::string * output) const
Like SerializeToString(), but appends to the data to the string's existing contents.
All required fields must be set.
virtual size_t MessageLite::ByteSizeLong() const = 0
Computes the serialized size of the message.
This recursively calls ByteSizeLong() on all embedded messages.
ByteSizeLong() is generally linear in the number of fields defined for the proto.
void MessageLite::SerializeWithCachedSizes(
io::CodedOutputStream * output) const
io::CodedOutputStream * output) const
Serializes the message without recomputing the size.
The message must not have changed since the last call to ByteSize(), and the value returned by ByteSize must be non-negative. Otherwise the results are undefined.
uint8 * MessageLite::SerializeWithCachedSizesToArray(
uint8 * target) const
uint8 * target) const
Like SerializeWithCachedSizes, but writes directly to *target, returning a pointer to the byte immediately after the last byte written.
"target" must point at a byte array of at least ByteSize() bytes. Whether to use deterministic serialization, e.g., maps in sorted order, is determined by CodedOutputStream::IsDefaultSerializationDeterministic().
virtual int MessageLite::GetCachedSize() const = 0
Returns the result of the last call to ByteSize().
An embedded message's size is needed both to serialize it (because embedded messages are length-delimited) and to compute the outer message's size. Caching the size avoids computing it multiple times.
ByteSize() does not automatically use the cached size when available because this would require invalidating it every time the message was modified, which would be too hard and expensive. (E.g. if a deeply-nested sub-message is changed, all of its parents' cached sizes would need to be invalidated, which is too much work for an otherwise inlined setter method.)