Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(94)

Side by Side Diff: third_party/protobuf/src/google/protobuf/message_lite.h

Issue 2495533002: third_party/protobuf: Update to HEAD (83d681ee2c) (Closed)
Patch Set: Make chrome settings proto generated file a component Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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__
OLDNEW
« no previous file with comments | « third_party/protobuf/src/google/protobuf/message.cc ('k') | third_party/protobuf/src/google/protobuf/message_lite.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698