| OLD | NEW | 
|---|
| 1 // Protocol Buffers - Google's data interchange format | 1 // Protocol Buffers - Google's data interchange format | 
| 2 // Copyright 2008 Google Inc.  All rights reserved. | 2 // Copyright 2008 Google Inc.  All rights reserved. | 
| 3 // https://developers.google.com/protocol-buffers/ | 3 // https://developers.google.com/protocol-buffers/ | 
| 4 // | 4 // | 
| 5 // Redistribution and use in source and binary forms, with or without | 5 // Redistribution and use in source and binary forms, with or without | 
| 6 // modification, are permitted provided that the following conditions are | 6 // modification, are permitted provided that the following conditions are | 
| 7 // met: | 7 // met: | 
| 8 // | 8 // | 
| 9 //     * Redistributions of source code must retain the above copyright | 9 //     * Redistributions of source code must retain the above copyright | 
| 10 // notice, this list of conditions and the following disclaimer. | 10 // notice, this list of conditions and the following disclaimer. | 
| (...skipping 21 matching lines...) Expand all  Loading... | 
| 32 //          kenton@google.com (Kenton Varda) | 32 //          kenton@google.com (Kenton Varda) | 
| 33 //  Based on original Protocol Buffers design by | 33 //  Based on original Protocol Buffers design by | 
| 34 //  Sanjay Ghemawat, Jeff Dean, and others. | 34 //  Sanjay Ghemawat, Jeff Dean, and others. | 
| 35 // | 35 // | 
| 36 // Defines MessageLite, the abstract interface implemented by all (lite | 36 // Defines MessageLite, the abstract interface implemented by all (lite | 
| 37 // and non-lite) protocol message objects. | 37 // and non-lite) protocol message objects. | 
| 38 | 38 | 
| 39 #ifndef GOOGLE_PROTOBUF_MESSAGE_LITE_H__ | 39 #ifndef GOOGLE_PROTOBUF_MESSAGE_LITE_H__ | 
| 40 #define GOOGLE_PROTOBUF_MESSAGE_LITE_H__ | 40 #define GOOGLE_PROTOBUF_MESSAGE_LITE_H__ | 
| 41 | 41 | 
|  | 42 #include <climits> | 
| 42 #include <google/protobuf/stubs/common.h> | 43 #include <google/protobuf/stubs/common.h> | 
|  | 44 #include <google/protobuf/stubs/logging.h> | 
| 43 | 45 | 
| 44 | 46 | 
| 45 namespace google { | 47 namespace google { | 
| 46 namespace protobuf { | 48 namespace protobuf { | 
| 47   class Arena; | 49   class Arena; | 
| 48 namespace io { | 50 namespace io { | 
| 49   class CodedInputStream; | 51   class CodedInputStream; | 
| 50   class CodedOutputStream; | 52   class CodedOutputStream; | 
| 51   class ZeroCopyInputStream; | 53   class ZeroCopyInputStream; | 
| 52   class ZeroCopyOutputStream; | 54   class ZeroCopyOutputStream; | 
| 53 } | 55 } | 
|  | 56 namespace internal { | 
|  | 57   class WireFormatLite; | 
|  | 58 } | 
| 54 | 59 | 
| 55 // Interface to light weight protocol messages. | 60 // Interface to light weight protocol messages. | 
| 56 // | 61 // | 
| 57 // This interface is implemented by all protocol message objects.  Non-lite | 62 // This interface is implemented by all protocol message objects.  Non-lite | 
| 58 // messages additionally implement the Message interface, which is a | 63 // messages additionally implement the Message interface, which is a | 
| 59 // subclass of MessageLite.  Use MessageLite instead when you only need | 64 // subclass of MessageLite.  Use MessageLite instead when you only need | 
| 60 // the subset of features which it supports -- namely, nothing that uses | 65 // the subset of features which it supports -- namely, nothing that uses | 
| 61 // descriptors or reflection.  You can instruct the protocol compiler | 66 // descriptors or reflection.  You can instruct the protocol compiler | 
| 62 // to generate classes which implement only MessageLite, not the full | 67 // to generate classes which implement only MessageLite, not the full | 
| 63 // Message interface, by adding the following line to the .proto file: | 68 // Message interface, by adding the following line to the .proto file: | 
| 64 // | 69 // | 
| 65 //   option optimize_for = LITE_RUNTIME; | 70 //   option optimize_for = LITE_RUNTIME; | 
| 66 // | 71 // | 
| 67 // This is particularly useful on resource-constrained systems where | 72 // This is particularly useful on resource-constrained systems where | 
| 68 // the full protocol buffers runtime library is too big. | 73 // the full protocol buffers runtime library is too big. | 
| 69 // | 74 // | 
| 70 // Note that on non-constrained systems (e.g. servers) when you need | 75 // Note that on non-constrained systems (e.g. servers) when you need | 
| 71 // to link in lots of protocol definitions, a better way to reduce | 76 // to link in lots of protocol definitions, a better way to reduce | 
| 72 // total code footprint is to use optimize_for = CODE_SIZE.  This | 77 // total code footprint is to use optimize_for = CODE_SIZE.  This | 
| 73 // will make the generated code smaller while still supporting all the | 78 // will make the generated code smaller while still supporting all the | 
| 74 // same features (at the expense of speed).  optimize_for = LITE_RUNTIME | 79 // same features (at the expense of speed).  optimize_for = LITE_RUNTIME | 
| 75 // is best when you only have a small number of message types linked | 80 // is best when you only have a small number of message types linked | 
| 76 // into your binary, in which case the size of the protocol buffers | 81 // into your binary, in which case the size of the protocol buffers | 
| 77 // runtime itself is the biggest problem. | 82 // runtime itself is the biggest problem. | 
| 78 class LIBPROTOBUF_EXPORT MessageLite { | 83 class LIBPROTOBUF_EXPORT MessageLite { | 
| 79  public: | 84  public: | 
| 80   inline MessageLite() {} | 85   inline MessageLite() {} | 
| 81   virtual ~MessageLite(); | 86   virtual ~MessageLite() {} | 
| 82 | 87 | 
| 83   // Basic Operations ------------------------------------------------ | 88   // Basic Operations ------------------------------------------------ | 
| 84 | 89 | 
| 85   // Get the name of this message type, e.g. "foo.bar.BazProto". | 90   // Get the name of this message type, e.g. "foo.bar.BazProto". | 
| 86   virtual string GetTypeName() const = 0; | 91   virtual string GetTypeName() const = 0; | 
| 87 | 92 | 
| 88   // Construct a new instance of the same type.  Ownership is passed to the | 93   // Construct a new instance of the same type.  Ownership is passed to the | 
| 89   // caller. | 94   // caller. | 
| 90   virtual MessageLite* New() const = 0; | 95   virtual MessageLite* New() const = 0; | 
| 91 | 96 | 
| (...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 229   // Like SerializeAsString(), but allows missing required fields. | 234   // Like SerializeAsString(), but allows missing required fields. | 
| 230   string SerializePartialAsString() const; | 235   string SerializePartialAsString() const; | 
| 231 | 236 | 
| 232   // Like SerializeToString(), but appends to the data to the string's existing | 237   // Like SerializeToString(), but appends to the data to the string's existing | 
| 233   // contents.  All required fields must be set. | 238   // contents.  All required fields must be set. | 
| 234   bool AppendToString(string* output) const; | 239   bool AppendToString(string* output) const; | 
| 235   // Like AppendToString(), but allows missing required fields. | 240   // Like AppendToString(), but allows missing required fields. | 
| 236   bool AppendPartialToString(string* output) const; | 241   bool AppendPartialToString(string* output) const; | 
| 237 | 242 | 
| 238   // Computes the serialized size of the message.  This recursively calls | 243   // Computes the serialized size of the message.  This recursively calls | 
| 239   // ByteSize() on all embedded messages.  If a subclass does not override | 244   // ByteSizeLong() on all embedded messages. | 
| 240   // this, it MUST override SetCachedSize(). |  | 
| 241   // | 245   // | 
| 242   // ByteSize() is generally linear in the number of fields defined for the | 246   // ByteSizeLong() is generally linear in the number of fields defined for the | 
| 243   // proto. | 247   // proto. | 
| 244   virtual int ByteSize() const = 0; | 248   virtual size_t ByteSizeLong() const = 0; | 
| 245 | 249 | 
| 246   // Serializes the message without recomputing the size.  The message must | 250   // Legacy ByteSize() API. | 
| 247   // not have changed since the last call to ByteSize(); if it has, the results | 251   int ByteSize() const { | 
| 248   // are undefined. | 252     size_t result = ByteSizeLong(); | 
|  | 253     GOOGLE_DCHECK_LE(result, static_cast<size_t>(INT_MAX)); | 
|  | 254     return static_cast<int>(result); | 
|  | 255   } | 
|  | 256 | 
|  | 257   // Serializes the message without recomputing the size.  The message must not | 
|  | 258   // have changed since the last call to ByteSize(), and the value returned by | 
|  | 259   // ByteSize must be non-negative.  Otherwise the results are undefined. | 
| 249   virtual void SerializeWithCachedSizes( | 260   virtual void SerializeWithCachedSizes( | 
| 250       io::CodedOutputStream* output) const = 0; | 261       io::CodedOutputStream* output) const = 0; | 
| 251 | 262 | 
| 252   // Like SerializeWithCachedSizes, but writes directly to *target, returning | 263   // A version of SerializeWithCachedSizesToArray, below, that does | 
| 253   // a pointer to the byte immediately after the last byte written.  "target" | 264   // not guarantee deterministic serialization. | 
| 254   // must point at a byte array of at least ByteSize() bytes. | 265   virtual uint8* SerializeWithCachedSizesToArray(uint8* target) const { | 
| 255   virtual uint8* SerializeWithCachedSizesToArray(uint8* target) const; | 266     return InternalSerializeWithCachedSizesToArray(false, target); | 
|  | 267   } | 
| 256 | 268 | 
| 257   // Returns the result of the last call to ByteSize().  An embedded message's | 269   // Returns the result of the last call to ByteSize().  An embedded message's | 
| 258   // size is needed both to serialize it (because embedded messages are | 270   // size is needed both to serialize it (because embedded messages are | 
| 259   // length-delimited) and to compute the outer message's size.  Caching | 271   // length-delimited) and to compute the outer message's size.  Caching | 
| 260   // the size avoids computing it multiple times. | 272   // the size avoids computing it multiple times. | 
| 261   // | 273   // | 
| 262   // ByteSize() does not automatically use the cached size when available | 274   // ByteSize() does not automatically use the cached size when available | 
| 263   // because this would require invalidating it every time the message was | 275   // because this would require invalidating it every time the message was | 
| 264   // modified, which would be too hard and expensive.  (E.g. if a deeply-nested | 276   // modified, which would be too hard and expensive.  (E.g. if a deeply-nested | 
| 265   // sub-message is changed, all of its parents' cached sizes would need to be | 277   // sub-message is changed, all of its parents' cached sizes would need to be | 
| 266   // invalidated, which is too much work for an otherwise inlined setter | 278   // invalidated, which is too much work for an otherwise inlined setter | 
| 267   // method.) | 279   // method.) | 
| 268   virtual int GetCachedSize() const = 0; | 280   virtual int GetCachedSize() const = 0; | 
| 269 | 281 | 
|  | 282   // Functions below here are not part of the public interface.  It isn't | 
|  | 283   // enforced, but they should be treated as private, and will be private | 
|  | 284   // at some future time.  Unfortunately the implementation of the "friend" | 
|  | 285   // keyword in GCC is broken at the moment, but we expect it will be fixed. | 
|  | 286 | 
|  | 287   // Like SerializeWithCachedSizes, but writes directly to *target, returning | 
|  | 288   // a pointer to the byte immediately after the last byte written.  "target" | 
|  | 289   // must point at a byte array of at least ByteSize() bytes.  If deterministic | 
|  | 290   // is true then we use deterministic serialization, e.g., map keys are sorted. | 
|  | 291   // FOR INTERNAL USE ONLY! | 
|  | 292   virtual uint8* InternalSerializeWithCachedSizesToArray(bool deterministic, | 
|  | 293                                                          uint8* target) const; | 
|  | 294 | 
| 270  private: | 295  private: | 
|  | 296   friend class internal::WireFormatLite; | 
|  | 297 | 
| 271   GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(MessageLite); | 298   GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(MessageLite); | 
| 272 }; | 299 }; | 
| 273 | 300 | 
| 274 }  // namespace protobuf | 301 }  // namespace protobuf | 
| 275 | 302 | 
| 276 }  // namespace google | 303 }  // namespace google | 
| 277 #endif  // GOOGLE_PROTOBUF_MESSAGE_LITE_H__ | 304 #endif  // GOOGLE_PROTOBUF_MESSAGE_LITE_H__ | 
| OLD | NEW | 
|---|