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

Side by Side Diff: third_party/protobuf/src/google/protobuf/message.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 161 matching lines...) Expand 10 before | Expand all | Expand 10 after
172 // adds descriptors and reflection on top of that. 172 // adds descriptors and reflection on top of that.
173 // 173 //
174 // The methods of this class that are virtual but not pure-virtual have 174 // The methods of this class that are virtual but not pure-virtual have
175 // default implementations based on reflection. Message classes which are 175 // default implementations based on reflection. Message classes which are
176 // optimized for speed will want to override these with faster implementations, 176 // optimized for speed will want to override these with faster implementations,
177 // but classes optimized for code size may be happy with keeping them. See 177 // but classes optimized for code size may be happy with keeping them. See
178 // the optimize_for option in descriptor.proto. 178 // the optimize_for option in descriptor.proto.
179 class LIBPROTOBUF_EXPORT Message : public MessageLite { 179 class LIBPROTOBUF_EXPORT Message : public MessageLite {
180 public: 180 public:
181 inline Message() {} 181 inline Message() {}
182 virtual ~Message(); 182 virtual ~Message() {}
183 183
184 // Basic Operations ------------------------------------------------ 184 // Basic Operations ------------------------------------------------
185 185
186 // Construct a new instance of the same type. Ownership is passed to the 186 // Construct a new instance of the same type. Ownership is passed to the
187 // caller. (This is also defined in MessageLite, but is defined again here 187 // caller. (This is also defined in MessageLite, but is defined again here
188 // for return-type covariance.) 188 // for return-type covariance.)
189 virtual Message* New() const = 0; 189 virtual Message* New() const = 0;
190 190
191 // Construct a new instance on the arena. Ownership is passed to the caller 191 // Construct a new instance on the arena. Ownership is passed to the caller
192 // if arena is a NULL. Default implementation allows for API compatibility 192 // if arena is a NULL. Default implementation allows for API compatibility
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
264 // MessageLite because they are not supported by the lite library. 264 // MessageLite because they are not supported by the lite library.
265 265
266 // Parse a protocol buffer from a file descriptor. If successful, the entire 266 // Parse a protocol buffer from a file descriptor. If successful, the entire
267 // input will be consumed. 267 // input will be consumed.
268 bool ParseFromFileDescriptor(int file_descriptor); 268 bool ParseFromFileDescriptor(int file_descriptor);
269 // Like ParseFromFileDescriptor(), but accepts messages that are missing 269 // Like ParseFromFileDescriptor(), but accepts messages that are missing
270 // required fields. 270 // required fields.
271 bool ParsePartialFromFileDescriptor(int file_descriptor); 271 bool ParsePartialFromFileDescriptor(int file_descriptor);
272 // Parse a protocol buffer from a C++ istream. If successful, the entire 272 // Parse a protocol buffer from a C++ istream. If successful, the entire
273 // input will be consumed. 273 // input will be consumed.
274 bool ParseFromIstream(istream* input); 274 bool ParseFromIstream(std::istream* input);
275 // Like ParseFromIstream(), but accepts messages that are missing 275 // Like ParseFromIstream(), but accepts messages that are missing
276 // required fields. 276 // required fields.
277 bool ParsePartialFromIstream(istream* input); 277 bool ParsePartialFromIstream(std::istream* input);
278 278
279 // Serialize the message and write it to the given file descriptor. All 279 // Serialize the message and write it to the given file descriptor. All
280 // required fields must be set. 280 // required fields must be set.
281 bool SerializeToFileDescriptor(int file_descriptor) const; 281 bool SerializeToFileDescriptor(int file_descriptor) const;
282 // Like SerializeToFileDescriptor(), but allows missing required fields. 282 // Like SerializeToFileDescriptor(), but allows missing required fields.
283 bool SerializePartialToFileDescriptor(int file_descriptor) const; 283 bool SerializePartialToFileDescriptor(int file_descriptor) const;
284 // Serialize the message and write it to the given C++ ostream. All 284 // Serialize the message and write it to the given C++ ostream. All
285 // required fields must be set. 285 // required fields must be set.
286 bool SerializeToOstream(ostream* output) const; 286 bool SerializeToOstream(std::ostream* output) const;
287 // Like SerializeToOstream(), but allows missing required fields. 287 // Like SerializeToOstream(), but allows missing required fields.
288 bool SerializePartialToOstream(ostream* output) const; 288 bool SerializePartialToOstream(std::ostream* output) const;
289 289
290 290
291 // Reflection-based methods ---------------------------------------- 291 // Reflection-based methods ----------------------------------------
292 // These methods are pure-virtual in MessageLite, but Message provides 292 // These methods are pure-virtual in MessageLite, but Message provides
293 // reflection-based default implementations. 293 // reflection-based default implementations.
294 294
295 virtual string GetTypeName() const; 295 virtual string GetTypeName() const;
296 virtual void Clear(); 296 virtual void Clear();
297 virtual bool IsInitialized() const; 297 virtual bool IsInitialized() const;
298 virtual void CheckTypeAndMergeFrom(const MessageLite& other); 298 virtual void CheckTypeAndMergeFrom(const MessageLite& other);
299 virtual bool MergePartialFromCodedStream(io::CodedInputStream* input); 299 virtual bool MergePartialFromCodedStream(io::CodedInputStream* input);
300 virtual int ByteSize() const; 300 virtual size_t ByteSizeLong() const;
301 virtual void SerializeWithCachedSizes(io::CodedOutputStream* output) const; 301 virtual void SerializeWithCachedSizes(io::CodedOutputStream* output) const;
302 302
303 private: 303 private:
304 // This is called only by the default implementation of ByteSize(), to 304 // This is called only by the default implementation of ByteSize(), to
305 // update the cached size. If you override ByteSize(), you do not need 305 // update the cached size. If you override ByteSize(), you do not need
306 // to override this. If you do not override ByteSize(), you MUST override 306 // to override this. If you do not override ByteSize(), you MUST override
307 // this; the default implementation will crash. 307 // this; the default implementation will crash.
308 // 308 //
309 // The method is private because subclasses should never call it; only 309 // The method is private because subclasses should never call it; only
310 // override it. Yes, C++ lets you do that. Crazy, huh? 310 // override it. Yes, C++ lets you do that. Crazy, huh?
(...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after
512 const FieldDescriptor* field) const = 0; 512 const FieldDescriptor* field) const = 0;
513 virtual const EnumValueDescriptor* GetEnum( 513 virtual const EnumValueDescriptor* GetEnum(
514 const Message& message, const FieldDescriptor* field) const = 0; 514 const Message& message, const FieldDescriptor* field) const = 0;
515 515
516 // GetEnumValue() returns an enum field's value as an integer rather than 516 // GetEnumValue() returns an enum field's value as an integer rather than
517 // an EnumValueDescriptor*. If the integer value does not correspond to a 517 // an EnumValueDescriptor*. If the integer value does not correspond to a
518 // known value descriptor, a new value descriptor is created. (Such a value 518 // known value descriptor, a new value descriptor is created. (Such a value
519 // will only be present when the new unknown-enum-value semantics are enabled 519 // will only be present when the new unknown-enum-value semantics are enabled
520 // for a message.) 520 // for a message.)
521 virtual int GetEnumValue( 521 virtual int GetEnumValue(
522 const Message& message, const FieldDescriptor* field) const; 522 const Message& message, const FieldDescriptor* field) const = 0;
523 523
524 // See MutableMessage() for the meaning of the "factory" parameter. 524 // See MutableMessage() for the meaning of the "factory" parameter.
525 virtual const Message& GetMessage(const Message& message, 525 virtual const Message& GetMessage(const Message& message,
526 const FieldDescriptor* field, 526 const FieldDescriptor* field,
527 MessageFactory* factory = NULL) const = 0; 527 MessageFactory* factory = NULL) const = 0;
528 528
529 // Get a string value without copying, if possible. 529 // Get a string value without copying, if possible.
530 // 530 //
531 // GetString() necessarily returns a copy of the string. This can be 531 // GetString() necessarily returns a copy of the string. This can be
532 // inefficient when the string is already stored in a string object in the 532 // inefficient when the string is already stored in a string object in the
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
568 const string& value) const = 0; 568 const string& value) const = 0;
569 virtual void SetEnum (Message* message, 569 virtual void SetEnum (Message* message,
570 const FieldDescriptor* field, 570 const FieldDescriptor* field,
571 const EnumValueDescriptor* value) const = 0; 571 const EnumValueDescriptor* value) const = 0;
572 // Set an enum field's value with an integer rather than EnumValueDescriptor. 572 // Set an enum field's value with an integer rather than EnumValueDescriptor.
573 // If the value does not correspond to a known enum value, either behavior is 573 // If the value does not correspond to a known enum value, either behavior is
574 // undefined (for proto2 messages), or the value is accepted silently for 574 // undefined (for proto2 messages), or the value is accepted silently for
575 // messages with new unknown-enum-value semantics. 575 // messages with new unknown-enum-value semantics.
576 virtual void SetEnumValue(Message* message, 576 virtual void SetEnumValue(Message* message,
577 const FieldDescriptor* field, 577 const FieldDescriptor* field,
578 int value) const; 578 int value) const = 0;
579 579
580 // Get a mutable pointer to a field with a message type. If a MessageFactory 580 // Get a mutable pointer to a field with a message type. If a MessageFactory
581 // is provided, it will be used to construct instances of the sub-message; 581 // is provided, it will be used to construct instances of the sub-message;
582 // otherwise, the default factory is used. If the field is an extension that 582 // otherwise, the default factory is used. If the field is an extension that
583 // does not live in the same pool as the containing message's descriptor (e.g. 583 // does not live in the same pool as the containing message's descriptor (e.g.
584 // it lives in an overlay pool), then a MessageFactory must be provided. 584 // it lives in an overlay pool), then a MessageFactory must be provided.
585 // If you have no idea what that meant, then you probably don't need to worry 585 // If you have no idea what that meant, then you probably don't need to worry
586 // about it (don't provide a MessageFactory). WARNING: If the 586 // about it (don't provide a MessageFactory). WARNING: If the
587 // FieldDescriptor is for a compiled-in extension, then 587 // FieldDescriptor is for a compiled-in extension, then
588 // factory->GetPrototype(field->message_type() MUST return an instance of the 588 // factory->GetPrototype(field->message_type()) MUST return an instance of
589 // compiled-in class for this type, NOT DynamicMessage. 589 // the compiled-in class for this type, NOT DynamicMessage.
590 virtual Message* MutableMessage(Message* message, 590 virtual Message* MutableMessage(Message* message,
591 const FieldDescriptor* field, 591 const FieldDescriptor* field,
592 MessageFactory* factory = NULL) const = 0; 592 MessageFactory* factory = NULL) const = 0;
593 // Replaces the message specified by 'field' with the already-allocated object 593 // Replaces the message specified by 'field' with the already-allocated object
594 // sub_message, passing ownership to the message. If the field contained a 594 // sub_message, passing ownership to the message. If the field contained a
595 // message, that message is deleted. If sub_message is NULL, the field is 595 // message, that message is deleted. If sub_message is NULL, the field is
596 // cleared. 596 // cleared.
597 virtual void SetAllocatedMessage(Message* message, 597 virtual void SetAllocatedMessage(Message* message,
598 Message* sub_message, 598 Message* sub_message,
599 const FieldDescriptor* field) const = 0; 599 const FieldDescriptor* field) const = 0;
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
639 virtual const EnumValueDescriptor* GetRepeatedEnum( 639 virtual const EnumValueDescriptor* GetRepeatedEnum(
640 const Message& message, 640 const Message& message,
641 const FieldDescriptor* field, int index) const = 0; 641 const FieldDescriptor* field, int index) const = 0;
642 // GetRepeatedEnumValue() returns an enum field's value as an integer rather 642 // GetRepeatedEnumValue() returns an enum field's value as an integer rather
643 // than an EnumValueDescriptor*. If the integer value does not correspond to a 643 // than an EnumValueDescriptor*. If the integer value does not correspond to a
644 // known value descriptor, a new value descriptor is created. (Such a value 644 // known value descriptor, a new value descriptor is created. (Such a value
645 // will only be present when the new unknown-enum-value semantics are enabled 645 // will only be present when the new unknown-enum-value semantics are enabled
646 // for a message.) 646 // for a message.)
647 virtual int GetRepeatedEnumValue( 647 virtual int GetRepeatedEnumValue(
648 const Message& message, 648 const Message& message,
649 const FieldDescriptor* field, int index) const; 649 const FieldDescriptor* field, int index) const = 0;
650 virtual const Message& GetRepeatedMessage( 650 virtual const Message& GetRepeatedMessage(
651 const Message& message, 651 const Message& message,
652 const FieldDescriptor* field, int index) const = 0; 652 const FieldDescriptor* field, int index) const = 0;
653 653
654 // See GetStringReference(), above. 654 // See GetStringReference(), above.
655 virtual const string& GetRepeatedStringReference( 655 virtual const string& GetRepeatedStringReference(
656 const Message& message, const FieldDescriptor* field, 656 const Message& message, const FieldDescriptor* field,
657 int index, string* scratch) const = 0; 657 int index, string* scratch) const = 0;
658 658
659 659
(...skipping 26 matching lines...) Expand all
686 int index, const string& value) const = 0; 686 int index, const string& value) const = 0;
687 virtual void SetRepeatedEnum(Message* message, 687 virtual void SetRepeatedEnum(Message* message,
688 const FieldDescriptor* field, int index, 688 const FieldDescriptor* field, int index,
689 const EnumValueDescriptor* value) const = 0; 689 const EnumValueDescriptor* value) const = 0;
690 // Set an enum field's value with an integer rather than EnumValueDescriptor. 690 // Set an enum field's value with an integer rather than EnumValueDescriptor.
691 // If the value does not correspond to a known enum value, either behavior is 691 // If the value does not correspond to a known enum value, either behavior is
692 // undefined (for proto2 messages), or the value is accepted silently for 692 // undefined (for proto2 messages), or the value is accepted silently for
693 // messages with new unknown-enum-value semantics. 693 // messages with new unknown-enum-value semantics.
694 virtual void SetRepeatedEnumValue(Message* message, 694 virtual void SetRepeatedEnumValue(Message* message,
695 const FieldDescriptor* field, int index, 695 const FieldDescriptor* field, int index,
696 int value) const; 696 int value) const = 0;
697 // Get a mutable pointer to an element of a repeated field with a message 697 // Get a mutable pointer to an element of a repeated field with a message
698 // type. 698 // type.
699 virtual Message* MutableRepeatedMessage( 699 virtual Message* MutableRepeatedMessage(
700 Message* message, const FieldDescriptor* field, int index) const = 0; 700 Message* message, const FieldDescriptor* field, int index) const = 0;
701 701
702 702
703 // Repeated field adders ------------------------------------------- 703 // Repeated field adders -------------------------------------------
704 // These add an element to a repeated field. 704 // These add an element to a repeated field.
705 705
706 virtual void AddInt32 (Message* message, 706 virtual void AddInt32 (Message* message,
(...skipping 15 matching lines...) Expand all
722 const string& value) const = 0; 722 const string& value) const = 0;
723 virtual void AddEnum (Message* message, 723 virtual void AddEnum (Message* message,
724 const FieldDescriptor* field, 724 const FieldDescriptor* field,
725 const EnumValueDescriptor* value) const = 0; 725 const EnumValueDescriptor* value) const = 0;
726 // Set an enum field's value with an integer rather than EnumValueDescriptor. 726 // Set an enum field's value with an integer rather than EnumValueDescriptor.
727 // If the value does not correspond to a known enum value, either behavior is 727 // If the value does not correspond to a known enum value, either behavior is
728 // undefined (for proto2 messages), or the value is accepted silently for 728 // undefined (for proto2 messages), or the value is accepted silently for
729 // messages with new unknown-enum-value semantics. 729 // messages with new unknown-enum-value semantics.
730 virtual void AddEnumValue(Message* message, 730 virtual void AddEnumValue(Message* message,
731 const FieldDescriptor* field, 731 const FieldDescriptor* field,
732 int value) const; 732 int value) const = 0;
733 // See MutableMessage() for comments on the "factory" parameter. 733 // See MutableMessage() for comments on the "factory" parameter.
734 virtual Message* AddMessage(Message* message, 734 virtual Message* AddMessage(Message* message,
735 const FieldDescriptor* field, 735 const FieldDescriptor* field,
736 MessageFactory* factory = NULL) const = 0; 736 MessageFactory* factory = NULL) const = 0;
737 737
738 // Appends an already-allocated object 'new_entry' to the repeated field 738 // Appends an already-allocated object 'new_entry' to the repeated field
739 // specifyed by 'field' passing ownership to the message. 739 // specifyed by 'field' passing ownership to the message.
740 // TODO(tmarek): Make virtual after all subclasses have been 740 // TODO(tmarek): Make virtual after all subclasses have been
741 // updated. 741 // updated.
742 virtual void AddAllocatedMessage(Message* /* message */, 742 virtual void AddAllocatedMessage(Message* /* message */,
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
841 // take arbitrary integer values, and the legacy GetEnum() getter will 841 // take arbitrary integer values, and the legacy GetEnum() getter will
842 // dynamically create an EnumValueDescriptor for any integer value without 842 // dynamically create an EnumValueDescriptor for any integer value without
843 // one. If |false|, setting an unknown enum value via the integer-based 843 // one. If |false|, setting an unknown enum value via the integer-based
844 // setters results in undefined behavior (in practice, GOOGLE_DCHECK-fails). 844 // setters results in undefined behavior (in practice, GOOGLE_DCHECK-fails).
845 // 845 //
846 // Generic code that uses reflection to handle messages with enum fields 846 // Generic code that uses reflection to handle messages with enum fields
847 // should check this flag before using the integer-based setter, and either 847 // should check this flag before using the integer-based setter, and either
848 // downgrade to a compatible value or use the UnknownFieldSet if not. For 848 // downgrade to a compatible value or use the UnknownFieldSet if not. For
849 // example: 849 // example:
850 // 850 //
851 // int new_value = GetValueFromApplicationLogic(); 851 // int new_value = GetValueFromApplicationLogic();
852 // if (reflection->SupportsUnknownEnumValues()) { 852 // if (reflection->SupportsUnknownEnumValues()) {
853 // reflection->SetEnumValue(message, field, new_value); 853 // reflection->SetEnumValue(message, field, new_value);
854 // } else { 854 // } else {
855 // if (field_descriptor->enum_type()-> 855 // if (field_descriptor->enum_type()->
856 // FindValueByNumver(new_value) != NULL) { 856 // FindValueByNumver(new_value) != NULL) {
857 // reflection->SetEnumValue(message, field, new_value); 857 // reflection->SetEnumValue(message, field, new_value);
858 // } else if (emit_unknown_enum_values) { 858 // } else if (emit_unknown_enum_values) {
859 // reflection->MutableUnknownFields(message)->AddVarint( 859 // reflection->MutableUnknownFields(message)->AddVarint(
860 // field->number(), 860 // field->number(), new_value);
861 // new_value);
862 // } else { 861 // } else {
863 // // convert value to a compatible/default value. 862 // // convert value to a compatible/default value.
864 // new_value = CompatibleDowngrade(new_value); 863 // new_value = CompatibleDowngrade(new_value);
865 // reflection->SetEnumValue(message, field, new_value); 864 // reflection->SetEnumValue(message, field, new_value);
866 // } 865 // }
867 // } 866 // }
868 virtual bool SupportsUnknownEnumValues() const { return false; } 867 virtual bool SupportsUnknownEnumValues() const { return false; }
869 868
870 // Returns the MessageFactory associated with this message. This can be 869 // Returns the MessageFactory associated with this message. This can be
871 // useful for determining if a message is a generated message or not, for 870 // useful for determining if a message is a generated message or not, for
872 // example: 871 // example:
873 // 872 // if (message->GetReflection()->GetMessageFactory() ==
874 // if (message->GetReflection()->GetMessageFactory() == 873 // google::protobuf::MessageFactory::generated_factory()) {
875 // google::protobuf::MessageFactory::generated_factory()) { 874 // // This is a generated message.
876 // // This is a generated message. 875 // }
877 // }
878 //
879 // It can also be used to create more messages of this type, though 876 // It can also be used to create more messages of this type, though
880 // Message::New() is an easier way to accomplish this. 877 // Message::New() is an easier way to accomplish this.
881 virtual MessageFactory* GetMessageFactory() const; 878 virtual MessageFactory* GetMessageFactory() const;
882 879
883 // --------------------------------------------------------------------------- 880 // ---------------------------------------------------------------------------
884 881
885 protected: 882 protected:
886 // Obtain a pointer to a Repeated Field Structure and do some type checking: 883 // Obtain a pointer to a Repeated Field Structure and do some type checking:
887 // on field->cpp_type(), 884 // on field->cpp_type(),
888 // on field->field_option().ctype() (if ctype >= 0) 885 // on field->field_option().ctype() (if ctype >= 0)
(...skipping 252 matching lines...) Expand 10 before | Expand all | Expand 10 after
1141 Message* message, const FieldDescriptor* field) const { 1138 Message* message, const FieldDescriptor* field) const {
1142 return static_cast<RepeatedPtrField<PB>* >( 1139 return static_cast<RepeatedPtrField<PB>* >(
1143 MutableRawRepeatedField(message, field, 1140 MutableRawRepeatedField(message, field,
1144 FieldDescriptor::CPPTYPE_MESSAGE, -1, 1141 FieldDescriptor::CPPTYPE_MESSAGE, -1,
1145 PB::default_instance().GetDescriptor())); 1142 PB::default_instance().GetDescriptor()));
1146 } 1143 }
1147 } // namespace protobuf 1144 } // namespace protobuf
1148 1145
1149 } // namespace google 1146 } // namespace google
1150 #endif // GOOGLE_PROTOBUF_MESSAGE_H__ 1147 #endif // GOOGLE_PROTOBUF_MESSAGE_H__
OLDNEW
« no previous file with comments | « third_party/protobuf/src/google/protobuf/map_unittest.proto ('k') | third_party/protobuf/src/google/protobuf/message.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698