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

Side by Side Diff: third_party/protobuf/src/google/protobuf/compiler/cpp/cpp_field.h

Issue 1842653006: Update //third_party/protobuf to version 3. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: merge Created 4 years, 8 months 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 // http://code.google.com/p/protobuf/ 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.
11 // * Redistributions in binary form must reproduce the above 11 // * Redistributions in binary form must reproduce the above
12 // copyright notice, this list of conditions and the following disclaimer 12 // copyright notice, this list of conditions and the following disclaimer
13 // in the documentation and/or other materials provided with the 13 // in the documentation and/or other materials provided with the
(...skipping 15 matching lines...) Expand all
29 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 30
31 // Author: kenton@google.com (Kenton Varda) 31 // Author: kenton@google.com (Kenton Varda)
32 // Based on original Protocol Buffers design by 32 // Based on original Protocol Buffers design by
33 // Sanjay Ghemawat, Jeff Dean, and others. 33 // Sanjay Ghemawat, Jeff Dean, and others.
34 34
35 #ifndef GOOGLE_PROTOBUF_COMPILER_CPP_FIELD_H__ 35 #ifndef GOOGLE_PROTOBUF_COMPILER_CPP_FIELD_H__
36 #define GOOGLE_PROTOBUF_COMPILER_CPP_FIELD_H__ 36 #define GOOGLE_PROTOBUF_COMPILER_CPP_FIELD_H__
37 37
38 #include <map> 38 #include <map>
39 #include <memory>
40 #ifndef _SHARED_PTR_H
41 #include <google/protobuf/stubs/shared_ptr.h>
42 #endif
39 #include <string> 43 #include <string>
40 44
41 #include <google/protobuf/stubs/common.h>
42 #include <google/protobuf/descriptor.h> 45 #include <google/protobuf/descriptor.h>
43 #include <google/protobuf/compiler/cpp/cpp_options.h> 46 #include <google/protobuf/compiler/cpp/cpp_options.h>
44 47
45 namespace google { 48 namespace google {
46 namespace protobuf { 49 namespace protobuf {
47 namespace io { 50 namespace io {
48 class Printer; // printer.h 51 class Printer; // printer.h
49 } 52 }
50 } 53 }
51 54
52 namespace protobuf { 55 namespace protobuf {
53 namespace compiler { 56 namespace compiler {
54 namespace cpp { 57 namespace cpp {
55 58
56 // Helper function: set variables in the map that are the same for all 59 // Helper function: set variables in the map that are the same for all
57 // field code generators. 60 // field code generators.
58 // ['name', 'index', 'number', 'classname', 'declared_type', 'tag_size', 61 // ['name', 'index', 'number', 'classname', 'declared_type', 'tag_size',
59 // 'deprecation']. 62 // 'deprecation'].
60 void SetCommonFieldVariables(const FieldDescriptor* descriptor, 63 void SetCommonFieldVariables(const FieldDescriptor* descriptor,
61 map<string, string>* variables, 64 map<string, string>* variables,
62 const Options& options); 65 const Options& options);
63 66
67 void SetCommonOneofFieldVariables(const FieldDescriptor* descriptor,
68 map<string, string>* variables);
69
64 class FieldGenerator { 70 class FieldGenerator {
65 public: 71 public:
66 FieldGenerator() {} 72 FieldGenerator() {}
67 virtual ~FieldGenerator(); 73 virtual ~FieldGenerator();
68 74
69 // Generate lines of code declaring members fields of the message class 75 // Generate lines of code declaring members fields of the message class
70 // needed to represent this field. These are placed inside the message 76 // needed to represent this field. These are placed inside the message
71 // class. 77 // class.
72 virtual void GeneratePrivateMembers(io::Printer* printer) const = 0; 78 virtual void GeneratePrivateMembers(io::Printer* printer) const = 0;
73 79
80 // Generate static default variable for this field. These are placed inside
81 // the message class. Most field types don't need this, so the default
82 // implementation is empty.
83 virtual void GenerateStaticMembers(io::Printer* /*printer*/) const {}
84
85 // Generate prototypes for accessors that will manipulate imported
86 // messages inline. These are for .proto.h headers.
87 //
88 // In .proto.h mode, the headers of imports are not #included. However,
89 // functions that manipulate the imported message types need access to
90 // the class definition of the imported message, meaning that the headers
91 // must be #included. To get around this, functions that manipulate
92 // imported message objects are defined as dependent functions in a base
93 // template class. By making them dependent template functions, the
94 // function templates will not be instantiated until they are called, so
95 // we can defer to those translation units to #include the necessary
96 // generated headers.
97 //
98 // See:
99 // http://en.cppreference.com/w/cpp/language/class_template#Implicit_instantia tion
100 //
101 // Most field types don't need this, so the default implementation is empty.
102 virtual void GenerateDependentAccessorDeclarations(
103 io::Printer* printer) const {}
104
74 // Generate prototypes for all of the accessor functions related to this 105 // Generate prototypes for all of the accessor functions related to this
75 // field. These are placed inside the class definition. 106 // field. These are placed inside the class definition.
76 virtual void GenerateAccessorDeclarations(io::Printer* printer) const = 0; 107 virtual void GenerateAccessorDeclarations(io::Printer* printer) const = 0;
77 108
109 // Generate inline definitions of depenent accessor functions for this field.
110 // These are placed inside the header after all class definitions.
111 virtual void GenerateDependentInlineAccessorDefinitions(
112 io::Printer* printer) const {}
113
78 // Generate inline definitions of accessor functions for this field. 114 // Generate inline definitions of accessor functions for this field.
79 // These are placed inside the header after all class definitions. 115 // These are placed inside the header after all class definitions.
116 // In non-.proto.h mode, this generates dependent accessor functions as well.
80 virtual void GenerateInlineAccessorDefinitions( 117 virtual void GenerateInlineAccessorDefinitions(
81 io::Printer* printer) const = 0; 118 io::Printer* printer, bool is_inline) const = 0;
82 119
83 // Generate definitions of accessors that aren't inlined. These are 120 // Generate definitions of accessors that aren't inlined. These are
84 // placed somewhere in the .cc file. 121 // placed somewhere in the .cc file.
85 // Most field types don't need this, so the default implementation is empty. 122 // Most field types don't need this, so the default implementation is empty.
86 virtual void GenerateNonInlineAccessorDefinitions( 123 virtual void GenerateNonInlineAccessorDefinitions(
87 io::Printer* printer) const {} 124 io::Printer* /*printer*/) const {}
88 125
89 // Generate lines of code (statements, not declarations) which clear the 126 // Generate lines of code (statements, not declarations) which clear the
90 // field. This is used to define the clear_$name$() method as well as 127 // field. This is used to define the clear_$name$() method as well as
91 // the Clear() method for the whole message. 128 // the Clear() method for the whole message.
92 virtual void GenerateClearingCode(io::Printer* printer) const = 0; 129 virtual void GenerateClearingCode(io::Printer* printer) const = 0;
93 130
94 // Generate lines of code (statements, not declarations) which merges the 131 // Generate lines of code (statements, not declarations) which merges the
95 // contents of the field from the current message to the target message, 132 // contents of the field from the current message to the target message,
96 // which is stored in the generated code variable "from". 133 // which is stored in the generated code variable "from".
97 // This is used to fill in the MergeFrom method for the whole message. 134 // This is used to fill in the MergeFrom method for the whole message.
98 // Details of this usage can be found in message.cc under the 135 // Details of this usage can be found in message.cc under the
99 // GenerateMergeFrom method. 136 // GenerateMergeFrom method.
100 virtual void GenerateMergingCode(io::Printer* printer) const = 0; 137 virtual void GenerateMergingCode(io::Printer* printer) const = 0;
101 138
102 // Generate lines of code (statements, not declarations) which swaps 139 // Generate lines of code (statements, not declarations) which swaps
103 // this field and the corresponding field of another message, which 140 // this field and the corresponding field of another message, which
104 // is stored in the generated code variable "other". This is used to 141 // is stored in the generated code variable "other". This is used to
105 // define the Swap method. Details of usage can be found in 142 // define the Swap method. Details of usage can be found in
106 // message.cc under the GenerateSwap method. 143 // message.cc under the GenerateSwap method.
107 virtual void GenerateSwappingCode(io::Printer* printer) const = 0; 144 virtual void GenerateSwappingCode(io::Printer* printer) const = 0;
108 145
109 // Generate initialization code for private members declared by 146 // Generate initialization code for private members declared by
110 // GeneratePrivateMembers(). These go into the message class's SharedCtor() 147 // GeneratePrivateMembers(). These go into the message class's SharedCtor()
111 // method, invoked by each of the generated constructors. 148 // method, invoked by each of the generated constructors.
112 virtual void GenerateConstructorCode(io::Printer* printer) const = 0; 149 virtual void GenerateConstructorCode(io::Printer* printer) const = 0;
113 150
114 // Generate any code that needs to go in the class's SharedDtor() method, 151 // Generate any code that needs to go in the class's SharedDtor() method,
115 // invoked by the destructor. 152 // invoked by the destructor.
116 // Most field types don't need this, so the default implementation is empty. 153 // Most field types don't need this, so the default implementation is empty.
117 virtual void GenerateDestructorCode(io::Printer* printer) const {} 154 virtual void GenerateDestructorCode(io::Printer* /*printer*/) const {}
155
156 // Generate a manual destructor invocation for use when the message is on an
157 // arena. The code that this method generates will be executed inside a
158 // shared-for-the-whole-message-class method registered with OwnDestructor().
159 // The method should return |true| if it generated any code that requires a
160 // call; this allows the message generator to eliminate the OwnDestructor()
161 // registration if no fields require it.
162 virtual bool GenerateArenaDestructorCode(io::Printer* printer) const {
163 return false;
164 }
118 165
119 // Generate code that allocates the fields's default instance. 166 // Generate code that allocates the fields's default instance.
120 virtual void GenerateDefaultInstanceAllocator(io::Printer* printer) const {} 167 virtual void GenerateDefaultInstanceAllocator(io::Printer* /*printer*/)
168 const {}
121 169
122 // Generate code that should be run when ShutdownProtobufLibrary() is called, 170 // Generate code that should be run when ShutdownProtobufLibrary() is called,
123 // to delete all dynamically-allocated objects. 171 // to delete all dynamically-allocated objects.
124 virtual void GenerateShutdownCode(io::Printer* printer) const {} 172 virtual void GenerateShutdownCode(io::Printer* /*printer*/) const {}
125 173
126 // Generate lines to decode this field, which will be placed inside the 174 // Generate lines to decode this field, which will be placed inside the
127 // message's MergeFromCodedStream() method. 175 // message's MergeFromCodedStream() method.
128 virtual void GenerateMergeFromCodedStream(io::Printer* printer) const = 0; 176 virtual void GenerateMergeFromCodedStream(io::Printer* printer) const = 0;
129 177
130 // Generate lines to decode this field from a packed value, which will be 178 // Generate lines to decode this field from a packed value, which will be
131 // placed inside the message's MergeFromCodedStream() method. 179 // placed inside the message's MergeFromCodedStream() method.
132 virtual void GenerateMergeFromCodedStreamWithPacking(io::Printer* printer) 180 virtual void GenerateMergeFromCodedStreamWithPacking(io::Printer* printer)
133 const; 181 const;
134 182
(...skipping 18 matching lines...) Expand all
153 // Convenience class which constructs FieldGenerators for a Descriptor. 201 // Convenience class which constructs FieldGenerators for a Descriptor.
154 class FieldGeneratorMap { 202 class FieldGeneratorMap {
155 public: 203 public:
156 explicit FieldGeneratorMap(const Descriptor* descriptor, const Options& option s); 204 explicit FieldGeneratorMap(const Descriptor* descriptor, const Options& option s);
157 ~FieldGeneratorMap(); 205 ~FieldGeneratorMap();
158 206
159 const FieldGenerator& get(const FieldDescriptor* field) const; 207 const FieldGenerator& get(const FieldDescriptor* field) const;
160 208
161 private: 209 private:
162 const Descriptor* descriptor_; 210 const Descriptor* descriptor_;
163 scoped_array<scoped_ptr<FieldGenerator> > field_generators_; 211 google::protobuf::scoped_array<google::protobuf::scoped_ptr<FieldGenerator> > field_generators_;
164 212
165 static FieldGenerator* MakeGenerator(const FieldDescriptor* field, 213 static FieldGenerator* MakeGenerator(const FieldDescriptor* field,
166 const Options& options); 214 const Options& options);
167 215
168 GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(FieldGeneratorMap); 216 GOOGLE_DISALLOW_EVIL_CONSTRUCTORS(FieldGeneratorMap);
169 }; 217 };
170 218
171 219
172 } // namespace cpp 220 } // namespace cpp
173 } // namespace compiler 221 } // namespace compiler
174 } // namespace protobuf 222 } // namespace protobuf
175 223
176 } // namespace google 224 } // namespace google
177 #endif // GOOGLE_PROTOBUF_COMPILER_CPP_FIELD_H__ 225 #endif // GOOGLE_PROTOBUF_COMPILER_CPP_FIELD_H__
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698