赞
踩
- // Abstract interface for protocol messages.
- //
- // See also MessageLite, which contains most every-day operations. Message
- // adds descriptors and reflection on top of that.
- //
- // The methods of this class that are virtual but not pure-virtual have
- // default implementations based on reflection. Message classes which are
- // optimized for speed will want to override these with faster implementations,
- // but classes optimized for code size may be happy with keeping them. See
- // the optimize_for option in descriptor.proto.
- class LIBPROTOBUF_EXPORT Message : public MessageLite {
- public:
- inline Message() {}
- virtual ~Message();
-
- // Basic Operations ------------------------------------------------
-
- // Construct a new instance of the same type. Ownership is passed to the
- // caller. (This is also defined in MessageLite, but is defined again here
- // for return-type covariance.)
- virtual Message* New() const = 0;
-
- // Make this message into a copy of the given message. The given message
- // must have the same descriptor, but need not necessarily be the same class.
- // By default this is just implemented as "Clear(); MergeFrom(from);".
- virtual void CopyFrom(const Message& from);
-
- // Merge the fields from the given message into this message. Singular
- // fields will be overwritten, except for embedded messages which will
- // be merged. Repeated fields will be concatenated. The given message
- // must be of the same type as this message (i.e. the exact same class).
- virtual void MergeFrom(const Message& from);
-
- // Verifies that IsInitialized() returns true. GOOGLE_CHECK-fails otherwise, with
- // a nice error message.
- void CheckInitialized() const;
-
- // Slowly build a list of all required fields that are not set.
- // This is much, much slower than IsInitialized() as it is implemented
- // purely via reflection. Generally, you should not call this unless you
- // have already determined that an error exists by calling IsInitialized().
- void FindInitializationErrors(vector<string>* errors) const;
-
- // Like FindInitializationErrors, but joins all the strings, delimited by
- // commas, and returns them.
- string InitializationErrorString() const;
-
- // Clears all unknown fields from this message and all embedded messages.
- // Normally, if unknown tag numbers are encountered when parsing a message,
- // the tag and value are stored in the message's UnknownFieldSet and
- // then written back out when the message is serialized. This allows servers
- // which simply route messages to other servers to pass through messages
- // that have new field definitions which they don't yet know about. However,
- // this behavior can have security implications. To avoid it, call this
- // method after parsing.
- //
- // See Reflection::GetUnknownFields() for more on unknown fields.
- virtual void DiscardUnknownFields();
-
- // Computes (an estimate of) the total number of bytes currently used for
- // storing the message in memory. The default implementation calls the
- // Reflection object's SpaceUsed() method.
- virtual int SpaceUsed() const;
-
- // Debugging & Testing----------------------------------------------
-
- // Generates a human readable form of this message, useful for debugging
- // and other purposes.
- string DebugString() const;
- // Like DebugString(), but with less whitespace.
- string ShortDebugString() const;
- // Like DebugString(), but do not escape UTF-8 byte sequences.
- string Utf8DebugString() const;
- // Convenience function useful in GDB. Prints DebugString() to stdout.
- void PrintDebugString() const;
-
- // Heavy I/O -------------------------------------------------------
- // Additional parsing and serialization methods not implemented by
- // MessageLite because they are not supported by the lite library.
-
- // Parse a protocol buffer from a file descriptor. If successful, the entire
- // input will be consumed.
- bool ParseFromFileDescriptor(int file_descriptor);
- // Like ParseFromFileDescriptor(), but accepts messages that are missing
- // required fields.
- bool ParsePartialFromFileDescriptor(int file_descriptor);
- // Parse a protocol buffer from a C++ istream. If successful, the entire
- // input will be consumed.
- bool ParseFromIstream(istream* input);
- // Like ParseFromIstream(), but accepts messages that are missing
- // required fields.
- bool ParsePartialFromIstream(istream* input);
-
- // Serialize the message and write it to the given file descriptor. All
- // required fields must be set.
- bool SerializeToFileDescriptor(int file_descriptor) const;
- // Like SerializeToFileDescriptor(), but allows missing required fields.
- bool SerializePartialToFileDescriptor(int file_descriptor) const;
- // Serialize the message and write it to the given C++ ostream. All
- // required fields must be set.
- bool SerializeToOstream(ostream* output) const;
- // Like SerializeToOstream(), but allows missing required fields.
- bool SerializePartialToOstream(ostream* output) const;
-
-
- // Reflection-based methods ----------------------------------------
- // These methods are pure-virtual in MessageLite, but Message provides
- // reflection-based default implementations.
-
- virtual string GetTypeName() const;
- virtual void Clear();
- virtual bool IsInitialized() const;
- virtual void CheckTypeAndMergeFrom(const MessageLite& other);
- virtual bool MergePartialFromCodedStream(io::CodedInputStream* input);
- virtual int ByteSize() const;
- virtual void SerializeWithCachedSizes(io::CodedOutputStream* output) const;
-
- private:
- // This is called only by the default implementation of ByteSize(), to
- // update the cached size. If you override ByteSize(), you do not need
- // to override this. If you do not override ByteSize(), you MUST override
- // this; the default implementation will crash.
- //
- // The method is private because subclasses should never call it; only
- // override it. Yes, C++ lets you do that. Crazy, huh?
- virtual void SetCachedSize(int size) const;
-
- public:
-
- // Introspection ---------------------------------------------------
-
- // Typedef for backwards-compatibility.
- typedef google::protobuf::Reflection Reflection;
-
- // Get a Descriptor for this message's type. This describes what
- // fields the message contains, the types of those fields, etc.
- const Descriptor* GetDescriptor() const { return GetMetadata().descriptor; }
-
- // Get the Reflection interface for this Message, which can be used to
- // read and modify the fields of the Message dynamically (in other words,
- // without knowing the message type at compile time). This object remains
- // property of the Message.
- //
- // This method remains virtual in case a subclass does not implement
- // reflection and wants to override the default behavior.
- virtual const Reflection* GetReflection() const {
- return GetMetadata().reflection;
- }
-
- protected:
- // Get a struct containing the metadata for the Message. Most subclasses only
- // need to implement this method, rather than the GetDescriptor() and
- // GetReflection() wrappers.
- virtual Metadata GetMetadata() const = 0;
-
-
- private:
- GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(Message);
- };
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。