1 // Protocol Buffers - Google's data interchange format 2 // Copyright 2008 Google Inc. All rights reserved. 3 // 4 // Use of this source code is governed by a BSD-style 5 // license that can be found in the LICENSE file or at 6 // https://developers.google.com/open-source/licenses/bsd 7 8 #ifndef GOOGLE_PROTOBUF_COMPILER_OBJECTIVEC_ENUM_FIELD_H__ 9 #define GOOGLE_PROTOBUF_COMPILER_OBJECTIVEC_ENUM_FIELD_H__ 10 11 #include <string> 12 13 #include "absl/container/btree_set.h" 14 #include "absl/container/flat_hash_set.h" 15 #include "google/protobuf/compiler/objectivec/field.h" 16 #include "google/protobuf/compiler/objectivec/options.h" 17 #include "google/protobuf/descriptor.h" 18 19 namespace google { 20 namespace protobuf { 21 namespace compiler { 22 namespace objectivec { 23 24 class EnumFieldGenerator : public SingleFieldGenerator { 25 friend FieldGenerator* FieldGenerator::Make( 26 const FieldDescriptor* field, 27 const GenerationOptions& generation_options); 28 29 EnumFieldGenerator(const EnumFieldGenerator&) = delete; 30 EnumFieldGenerator& operator=(const EnumFieldGenerator&) = delete; 31 32 public: 33 void GenerateCFunctionDeclarations(io::Printer* printer) const override; 34 void GenerateCFunctionImplementations(io::Printer* printer) const override; 35 void DetermineForwardDeclarations(absl::btree_set<std::string>* fwd_decls, 36 bool include_external_types) const override; 37 void DetermineNeededFiles( 38 absl::flat_hash_set<const FileDescriptor*>* deps) const override; 39 40 protected: 41 EnumFieldGenerator(const FieldDescriptor* descriptor, 42 const GenerationOptions& generation_options); 43 ~EnumFieldGenerator() override = default; 44 }; 45 46 class RepeatedEnumFieldGenerator : public RepeatedFieldGenerator { 47 friend FieldGenerator* FieldGenerator::Make( 48 const FieldDescriptor* field, 49 const GenerationOptions& generation_options); 50 51 public: 52 void EmitArrayComment(io::Printer* printer) const override; 53 void DetermineNeededFiles( 54 absl::flat_hash_set<const FileDescriptor*>* deps) const override; 55 56 protected: 57 RepeatedEnumFieldGenerator(const FieldDescriptor* descriptor, 58 const GenerationOptions& generation_options); 59 ~RepeatedEnumFieldGenerator() override = default; 60 }; 61 62 } // namespace objectivec 63 } // namespace compiler 64 } // namespace protobuf 65 } // namespace google 66 #endif // GOOGLE_PROTOBUF_COMPILER_OBJECTIVEC_ENUM_FIELD_H__ 67