objectivec_field.h
Go to the documentation of this file.
1 // Protocol Buffers - Google's data interchange format
2 // Copyright 2008 Google Inc. All rights reserved.
3 // https://developers.google.com/protocol-buffers/
4 //
5 // Redistribution and use in source and binary forms, with or without
6 // modification, are permitted provided that the following conditions are
7 // met:
8 //
9 // * Redistributions of source code must retain the above copyright
10 // notice, this list of conditions and the following disclaimer.
11 // * Redistributions in binary form must reproduce the above
12 // copyright notice, this list of conditions and the following disclaimer
13 // in the documentation and/or other materials provided with the
14 // distribution.
15 // * Neither the name of Google Inc. nor the names of its
16 // contributors may be used to endorse or promote products derived from
17 // this software without specific prior written permission.
18 //
19 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 
31 #ifndef GOOGLE_PROTOBUF_COMPILER_OBJECTIVEC_FIELD_H__
32 #define GOOGLE_PROTOBUF_COMPILER_OBJECTIVEC_FIELD_H__
33 
34 #include <map>
35 #include <string>
39 
40 namespace google {
41 namespace protobuf {
42 namespace compiler {
43 namespace objectivec {
44 
46  public:
48  const Options& options);
49 
50  virtual ~FieldGenerator();
51 
52  FieldGenerator(const FieldGenerator&) = delete;
53  FieldGenerator& operator=(const FieldGenerator&) = delete;
54 
55  // Exposed for subclasses to fill in.
56  virtual void GenerateFieldStorageDeclaration(io::Printer* printer) const = 0;
57  virtual void GeneratePropertyDeclaration(io::Printer* printer) const = 0;
58  virtual void GeneratePropertyImplementation(io::Printer* printer) const = 0;
59 
60  // Called by GenerateFieldDescription, exposed for classes that need custom
61  // generation.
62 
63  // Exposed for subclasses to extend, base does nothing.
64  virtual void GenerateCFunctionDeclarations(io::Printer* printer) const;
65  virtual void GenerateCFunctionImplementations(io::Printer* printer) const;
66 
67  // Exposed for subclasses, should always call it on the parent class also.
68  virtual void DetermineForwardDeclarations(std::set<string>* fwd_decls) const;
69 
70  // Used during generation, not intended to be extended by subclasses.
72  io::Printer* printer, bool include_default) const;
73  void GenerateFieldNumberConstant(io::Printer* printer) const;
74 
75  // Exposed to get and set the has bits information.
76  virtual bool RuntimeUsesHasBit(void) const = 0;
77  void SetRuntimeHasBit(int has_index);
78  void SetNoHasBit(void);
79  virtual int ExtraRuntimeHasBitsNeeded(void) const;
80  virtual void SetExtraRuntimeHasBitsBase(int index_base);
81  void SetOneofIndexBase(int index_base);
82 
83  string variable(const char* key) const {
84  return variables_.find(key)->second;
85  }
86 
88  const string& field_flags = variable("fieldflags");
89  return field_flags.find("GPBFieldTextFormatNameCustom") != string::npos;
90  }
91  string generated_objc_name() const { return variable("name"); }
92  string raw_field_name() const { return variable("raw_field_name"); }
93 
94  protected:
96 
97  virtual void FinishInitialization(void);
98  virtual bool WantsHasProperty(void) const = 0;
99 
101  std::map<string, string> variables_;
102 };
103 
105  public:
106  virtual ~SingleFieldGenerator();
107 
110 
111  virtual void GenerateFieldStorageDeclaration(io::Printer* printer) const;
112  virtual void GeneratePropertyDeclaration(io::Printer* printer) const;
113 
114  virtual void GeneratePropertyImplementation(io::Printer* printer) const;
115 
116  virtual bool RuntimeUsesHasBit(void) const;
117 
118  protected:
120  const Options& options);
121  virtual bool WantsHasProperty(void) const;
122 };
123 
124 // Subclass with common support for when the field ends up as an ObjC Object.
126  public:
127  virtual ~ObjCObjFieldGenerator();
128 
131 
132  virtual void GenerateFieldStorageDeclaration(io::Printer* printer) const;
133  virtual void GeneratePropertyDeclaration(io::Printer* printer) const;
134 
135  protected:
137  const Options& options);
138 };
139 
141  public:
142  virtual ~RepeatedFieldGenerator();
143 
146 
147  virtual void GenerateFieldStorageDeclaration(io::Printer* printer) const;
148  virtual void GeneratePropertyDeclaration(io::Printer* printer) const;
149 
150  virtual void GeneratePropertyImplementation(io::Printer* printer) const;
151 
152  virtual bool RuntimeUsesHasBit(void) const;
153 
154  protected:
156  const Options& options);
157  virtual void FinishInitialization(void);
158  virtual bool WantsHasProperty(void) const;
159 };
160 
161 // Convenience class which constructs FieldGenerators for a Descriptor.
163  public:
166 
167  FieldGeneratorMap(const FieldGeneratorMap&) = delete;
169 
170  const FieldGenerator& get(const FieldDescriptor* field) const;
171  const FieldGenerator& get_extension(int index) const;
172 
173  // Assigns the has bits and returns the number of bits needed.
174  int CalculateHasBits(void);
175 
176  void SetOneofIndexBase(int index_base);
177 
178  // Check if any field of this message has a non zero default.
179  bool DoesAnyFieldHaveNonZeroDefault(void) const;
180 
181  private:
183  std::vector<std::unique_ptr<FieldGenerator>> field_generators_;
184  std::vector<std::unique_ptr<FieldGenerator>> extension_generators_;
185 };
186 
187 } // namespace objectivec
188 } // namespace compiler
189 } // namespace protobuf
190 } // namespace google
191 
192 #endif // GOOGLE_PROTOBUF_COMPILER_OBJECTIVEC_FIELD_H__
google::protobuf::compiler::objectivec::FieldGeneratorMap::DoesAnyFieldHaveNonZeroDefault
bool DoesAnyFieldHaveNonZeroDefault(void) const
Definition: objectivec_field.cc:461
google::protobuf::compiler::objectivec::FieldGeneratorMap::operator=
FieldGeneratorMap & operator=(const FieldGeneratorMap &)=delete
google::protobuf::compiler::objectivec::FieldGenerator::raw_field_name
string raw_field_name() const
Definition: objectivec_field.h:92
google::protobuf::FieldDescriptor
Definition: src/google/protobuf/descriptor.h:515
google::protobuf::compiler::objectivec::ObjCObjFieldGenerator::operator=
ObjCObjFieldGenerator & operator=(const ObjCObjFieldGenerator &)=delete
google::protobuf::compiler::objectivec::FieldGenerator::ExtraRuntimeHasBitsNeeded
virtual int ExtraRuntimeHasBitsNeeded(void) const
Definition: objectivec_field.cc:223
google::protobuf::compiler::objectivec::FieldGeneratorMap::FieldGeneratorMap
FieldGeneratorMap(const Descriptor *descriptor, const Options &options)
Definition: objectivec_field.cc:409
google::protobuf::compiler::objectivec::SingleFieldGenerator::SingleFieldGenerator
SingleFieldGenerator(const SingleFieldGenerator &)=delete
google::protobuf::compiler::objectivec::FieldGenerator::SetExtraRuntimeHasBitsBase
virtual void SetExtraRuntimeHasBitsBase(int index_base)
Definition: objectivec_field.cc:227
options
Message * options
Definition: src/google/protobuf/descriptor.cc:3119
google::protobuf::compiler::objectivec::FieldGenerator::generated_objc_name
string generated_objc_name() const
Definition: objectivec_field.h:91
google::protobuf::compiler::objectivec::FieldGenerator::GenerateCFunctionDeclarations
virtual void GenerateCFunctionDeclarations(io::Printer *printer) const
Definition: objectivec_field.cc:169
google::protobuf::compiler::objectivec::FieldGeneratorMap::descriptor_
const Descriptor * descriptor_
Definition: objectivec_field.h:182
google::protobuf::compiler::objectivec::FieldGeneratorMap::extension_generators_
std::vector< std::unique_ptr< FieldGenerator > > extension_generators_
Definition: objectivec_field.h:184
google::protobuf::compiler::objectivec::SingleFieldGenerator::~SingleFieldGenerator
virtual ~SingleFieldGenerator()
Definition: objectivec_field.cc:257
google::protobuf::compiler::objectivec::FieldGenerator
Definition: objectivec_field.h:45
google::protobuf::compiler::objectivec::FieldGeneratorMap::CalculateHasBits
int CalculateHasBits(void)
Definition: objectivec_field.cc:437
google::protobuf::compiler::objectivec::Options
Definition: objectivec_helpers.h:50
google::protobuf::compiler::objectivec::FieldGeneratorMap::field_generators_
std::vector< std::unique_ptr< FieldGenerator > > field_generators_
Definition: objectivec_field.h:183
google::protobuf::compiler::objectivec::SingleFieldGenerator::operator=
SingleFieldGenerator & operator=(const SingleFieldGenerator &)=delete
objectivec_helpers.h
google::protobuf::compiler::objectivec::FieldGenerator::FieldGenerator
FieldGenerator(const FieldGenerator &)=delete
google::protobuf::compiler::objectivec::FieldGenerator::variable
string variable(const char *key) const
Definition: objectivec_field.h:83
google::protobuf::compiler::objectivec::FieldGenerator::GeneratePropertyImplementation
virtual void GeneratePropertyImplementation(io::Printer *printer) const =0
google::protobuf::compiler::objectivec::FieldGenerator::needs_textformat_name_support
bool needs_textformat_name_support() const
Definition: objectivec_field.h:87
descriptor
Descriptor * descriptor
Definition: php/ext/google/protobuf/protobuf.h:936
google::protobuf::compiler::objectivec::SingleFieldGenerator::GeneratePropertyDeclaration
virtual void GeneratePropertyDeclaration(io::Printer *printer) const
Definition: objectivec_field.cc:264
google::protobuf::compiler::objectivec::FieldGenerator::GenerateFieldNumberConstant
void GenerateFieldNumberConstant(io::Printer *printer) const
Definition: objectivec_field.cc:163
google::protobuf::compiler::objectivec::RepeatedFieldGenerator::FinishInitialization
virtual void FinishInitialization(void)
Definition: objectivec_field.cc:358
google::protobuf::compiler::objectivec::FieldGenerator::operator=
FieldGenerator & operator=(const FieldGenerator &)=delete
google::protobuf::compiler::objectivec::RepeatedFieldGenerator::GeneratePropertyImplementation
virtual void GeneratePropertyImplementation(io::Printer *printer) const
Definition: objectivec_field.cc:370
google::protobuf::compiler::objectivec::ObjCObjFieldGenerator
Definition: objectivec_field.h:125
google::protobuf::compiler::objectivec::FieldGenerator::RuntimeUsesHasBit
virtual bool RuntimeUsesHasBit(void) const =0
google::protobuf::compiler::objectivec::FieldGeneratorMap
Definition: objectivec_field.h:162
google::protobuf::compiler::objectivec::FieldGenerator::GeneratePropertyDeclaration
virtual void GeneratePropertyDeclaration(io::Printer *printer) const =0
printer.h
google::protobuf::compiler::objectivec::RepeatedFieldGenerator
Definition: objectivec_field.h:140
google::protobuf::compiler::objectivec::FieldGenerator::GenerateFieldStorageDeclaration
virtual void GenerateFieldStorageDeclaration(io::Printer *printer) const =0
google::protobuf::compiler::objectivec::FieldGeneratorMap::get_extension
const FieldGenerator & get_extension(int index) const
Definition: objectivec_field.cc:433
google::protobuf::compiler::objectivec::FieldGenerator::Make
static FieldGenerator * Make(const FieldDescriptor *field, const Options &options)
Definition: objectivec_field.cc:113
google::protobuf::compiler::objectivec::FieldGeneratorMap::SetOneofIndexBase
void SetOneofIndexBase(int index_base)
Definition: objectivec_field.cc:455
google::protobuf::compiler::objectivec::FieldGenerator::SetOneofIndexBase
void SetOneofIndexBase(int index_base)
Definition: objectivec_field.cc:235
google::protobuf::compiler::objectivec::SingleFieldGenerator::GenerateFieldStorageDeclaration
virtual void GenerateFieldStorageDeclaration(io::Printer *printer) const
Definition: objectivec_field.cc:259
field
const FieldDescriptor * field
Definition: parser_unittest.cc:2694
key
const SETUP_TEARDOWN_TESTCONTEXT char * key
Definition: test_wss_transport.cpp:10
google::protobuf::compiler::objectivec::RepeatedFieldGenerator::GeneratePropertyDeclaration
virtual void GeneratePropertyDeclaration(io::Printer *printer) const
Definition: objectivec_field.cc:375
google::protobuf::compiler::objectivec::FieldGenerator::WantsHasProperty
virtual bool WantsHasProperty(void) const =0
google::protobuf::io::Printer
Definition: printer.h:181
google::protobuf::compiler::objectivec::RepeatedFieldGenerator::RepeatedFieldGenerator
RepeatedFieldGenerator(const RepeatedFieldGenerator &)=delete
google::protobuf::compiler::objectivec::RepeatedFieldGenerator::~RepeatedFieldGenerator
virtual ~RepeatedFieldGenerator()
Definition: objectivec_field.cc:356
google::protobuf::compiler::objectivec::SingleFieldGenerator::WantsHasProperty
virtual bool WantsHasProperty(void) const
Definition: objectivec_field.cc:287
google::protobuf::compiler::objectivec::FieldGenerator::SetNoHasBit
void SetNoHasBit(void)
Definition: objectivec_field.cc:219
google::protobuf::compiler::objectivec::ObjCObjFieldGenerator::GeneratePropertyDeclaration
virtual void GeneratePropertyDeclaration(io::Printer *printer) const
Definition: objectivec_field.cc:323
google::protobuf::compiler::objectivec::SingleFieldGenerator::RuntimeUsesHasBit
virtual bool RuntimeUsesHasBit(void) const
Definition: objectivec_field.cc:299
google::protobuf::compiler::objectivec::RepeatedFieldGenerator::RuntimeUsesHasBit
virtual bool RuntimeUsesHasBit(void) const
Definition: objectivec_field.cc:405
google::protobuf::compiler::objectivec::RepeatedFieldGenerator::GenerateFieldStorageDeclaration
virtual void GenerateFieldStorageDeclaration(io::Printer *printer) const
Definition: objectivec_field.cc:365
google::protobuf::compiler::objectivec::FieldGenerator::GenerateFieldDescription
void GenerateFieldDescription(io::Printer *printer, bool include_default) const
Definition: objectivec_field.cc:184
google::protobuf::compiler::objectivec::FieldGeneratorMap::get
const FieldGenerator & get(const FieldDescriptor *field) const
Definition: objectivec_field.cc:427
google::protobuf::compiler::objectivec::FieldGenerator::GenerateCFunctionImplementations
virtual void GenerateCFunctionImplementations(io::Printer *printer) const
Definition: objectivec_field.cc:174
google::protobuf::compiler::objectivec::FieldGenerator::DetermineForwardDeclarations
virtual void DetermineForwardDeclarations(std::set< string > *fwd_decls) const
Definition: objectivec_field.cc:179
google::protobuf::Descriptor
Definition: src/google/protobuf/descriptor.h:231
descriptor.h
google::protobuf::compiler::objectivec::FieldGenerator::variables_
std::map< string, string > variables_
Definition: objectivec_field.h:101
google::protobuf::compiler::objectivec::ObjCObjFieldGenerator::ObjCObjFieldGenerator
ObjCObjFieldGenerator(const ObjCObjFieldGenerator &)=delete
google::protobuf::compiler::objectivec::RepeatedFieldGenerator::operator=
RepeatedFieldGenerator & operator=(const RepeatedFieldGenerator &)=delete
google::protobuf::compiler::objectivec::FieldGenerator::descriptor_
const FieldDescriptor * descriptor_
Definition: objectivec_field.h:100
google::protobuf::compiler::objectivec::ObjCObjFieldGenerator::GenerateFieldStorageDeclaration
virtual void GenerateFieldStorageDeclaration(io::Printer *printer) const
Definition: objectivec_field.cc:318
google::protobuf::compiler::objectivec::FieldGenerator::~FieldGenerator
virtual ~FieldGenerator()
Definition: objectivec_field.cc:161
google::protobuf::compiler::objectivec::FieldGeneratorMap::~FieldGeneratorMap
~FieldGeneratorMap()
Definition: objectivec_field.cc:425
google::protobuf::compiler::objectivec::SingleFieldGenerator
Definition: objectivec_field.h:104
google::protobuf::compiler::objectivec::ObjCObjFieldGenerator::~ObjCObjFieldGenerator
virtual ~ObjCObjFieldGenerator()
Definition: objectivec_field.cc:316
index
GLuint index
Definition: glcorearb.h:3055
google::protobuf::compiler::objectivec::FieldGenerator::SetRuntimeHasBit
void SetRuntimeHasBit(int has_index)
Definition: objectivec_field.cc:215
compiler
Definition: plugin.pb.cc:22
google
Definition: data_proto2_to_proto3_util.h:11
google::protobuf::compiler::objectivec::FieldGenerator::FinishInitialization
virtual void FinishInitialization(void)
Definition: objectivec_field.cc:243
google::protobuf::compiler::objectivec::RepeatedFieldGenerator::WantsHasProperty
virtual bool WantsHasProperty(void) const
Definition: objectivec_field.cc:400
google::protobuf::compiler::objectivec::SingleFieldGenerator::GeneratePropertyImplementation
virtual void GeneratePropertyImplementation(io::Printer *printer) const
Definition: objectivec_field.cc:278


libaditof
Author(s):
autogenerated on Wed May 21 2025 02:06:57