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_CSHARP_WRAPPER_FIELD_H__ 9 #define GOOGLE_PROTOBUF_COMPILER_CSHARP_WRAPPER_FIELD_H__ 10 11 #include "google/protobuf/compiler/code_generator.h" 12 #include "google/protobuf/compiler/csharp/csharp_field_base.h" 13 14 namespace google { 15 namespace protobuf { 16 namespace compiler { 17 namespace csharp { 18 19 struct Options; 20 21 class WrapperFieldGenerator : public FieldGeneratorBase { 22 public: 23 WrapperFieldGenerator(const FieldDescriptor* descriptor, 24 int presenceIndex, 25 const Options *options); 26 ~WrapperFieldGenerator(); 27 28 WrapperFieldGenerator(const WrapperFieldGenerator&) = delete; 29 WrapperFieldGenerator& operator=(const WrapperFieldGenerator&) = delete; 30 31 virtual void GenerateCodecCode(io::Printer* printer) override; 32 virtual void GenerateCloningCode(io::Printer* printer) override; 33 virtual void GenerateMembers(io::Printer* printer) override; 34 virtual void GenerateMergingCode(io::Printer* printer) override; 35 virtual void GenerateParsingCode(io::Printer* printer) override; 36 virtual void GenerateParsingCode(io::Printer* printer, bool use_parse_context) override; 37 virtual void GenerateSerializationCode(io::Printer* printer) override; 38 virtual void GenerateSerializationCode(io::Printer* printer, bool use_write_context) override; 39 virtual void GenerateSerializedSizeCode(io::Printer* printer) override; 40 virtual void GenerateExtensionCode(io::Printer* printer) override; 41 42 virtual void WriteHash(io::Printer* printer) override; 43 virtual void WriteEquals(io::Printer* printer) override; 44 virtual void WriteToString(io::Printer* printer) override; 45 46 private: 47 bool is_value_type; // True for int32 etc; false for bytes and string 48 }; 49 50 class WrapperOneofFieldGenerator : public WrapperFieldGenerator { 51 public: 52 WrapperOneofFieldGenerator(const FieldDescriptor* descriptor, 53 int presenceIndex, 54 const Options *options); 55 ~WrapperOneofFieldGenerator(); 56 57 WrapperOneofFieldGenerator(const WrapperOneofFieldGenerator&) = delete; 58 WrapperOneofFieldGenerator& operator=(const WrapperOneofFieldGenerator&) = delete; 59 60 virtual void GenerateMembers(io::Printer* printer) override; 61 virtual void GenerateMergingCode(io::Printer* printer) override; 62 virtual void GenerateParsingCode(io::Printer* printer) override; 63 virtual void GenerateParsingCode(io::Printer* printer, bool use_parse_context) override; 64 virtual void GenerateSerializationCode(io::Printer* printer) override; 65 virtual void GenerateSerializationCode(io::Printer* printer, bool use_write_context) override; 66 virtual void GenerateSerializedSizeCode(io::Printer* printer) override; 67 }; 68 69 } // namespace csharp 70 } // namespace compiler 71 } // namespace protobuf 72 } // namespace google 73 74 #endif // GOOGLE_PROTOBUF_COMPILER_CSHARP_WRAPPER_FIELD_H__ 75