Line data Source code
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 : #include <sstream>
32 :
33 : #include <google/protobuf/compiler/code_generator.h>
34 : #include <google/protobuf/compiler/plugin.h>
35 : #include <google/protobuf/descriptor.h>
36 : #include <google/protobuf/descriptor.pb.h>
37 : #include <google/protobuf/io/printer.h>
38 : #include <google/protobuf/io/zero_copy_stream.h>
39 : #include <google/protobuf/wire_format.h>
40 :
41 : #include <google/protobuf/compiler/csharp/csharp_helpers.h>
42 : #include <google/protobuf/compiler/csharp/csharp_repeated_enum_field.h>
43 :
44 : namespace google {
45 : namespace protobuf {
46 : namespace compiler {
47 : namespace csharp {
48 :
49 0 : RepeatedEnumFieldGenerator::RepeatedEnumFieldGenerator(
50 : const FieldDescriptor* descriptor, int fieldOrdinal)
51 0 : : FieldGeneratorBase(descriptor, fieldOrdinal) {
52 0 : }
53 :
54 0 : RepeatedEnumFieldGenerator::~RepeatedEnumFieldGenerator() {
55 :
56 0 : }
57 :
58 0 : void RepeatedEnumFieldGenerator::GenerateMembers(io::Printer* printer) {
59 : printer->Print(
60 : variables_,
61 : "private static readonly pb::FieldCodec<$type_name$> _repeated_$name$_codec\n"
62 0 : " = pb::FieldCodec.ForEnum($tag$, x => (int) x, x => ($type_name$) x);\n");
63 : printer->Print(variables_,
64 0 : "private readonly pbc::RepeatedField<$type_name$> $name$_ = new pbc::RepeatedField<$type_name$>();\n");
65 0 : AddDeprecatedFlag(printer);
66 : printer->Print(
67 : variables_,
68 : "$access_level$ pbc::RepeatedField<$type_name$> $property_name$ {\n"
69 : " get { return $name$_; }\n"
70 0 : "}\n");
71 0 : }
72 :
73 0 : void RepeatedEnumFieldGenerator::GenerateMergingCode(io::Printer* printer) {
74 : printer->Print(
75 : variables_,
76 0 : "$name$_.Add(other.$name$_);\n");
77 0 : }
78 :
79 0 : void RepeatedEnumFieldGenerator::GenerateParsingCode(io::Printer* printer) {
80 : printer->Print(
81 : variables_,
82 0 : "$name$_.AddEntriesFrom(input, _repeated_$name$_codec);\n");
83 0 : }
84 :
85 0 : void RepeatedEnumFieldGenerator::GenerateSerializationCode(io::Printer* printer) {
86 : printer->Print(
87 : variables_,
88 0 : "$name$_.WriteTo(output, _repeated_$name$_codec);\n");
89 0 : }
90 :
91 0 : void RepeatedEnumFieldGenerator::GenerateSerializedSizeCode(io::Printer* printer) {
92 : printer->Print(
93 : variables_,
94 0 : "size += $name$_.CalculateSize(_repeated_$name$_codec);\n");
95 0 : }
96 :
97 0 : void RepeatedEnumFieldGenerator::WriteHash(io::Printer* printer) {
98 : printer->Print(
99 : variables_,
100 0 : "hash ^= $name$_.GetHashCode();\n");
101 0 : }
102 :
103 0 : void RepeatedEnumFieldGenerator::WriteEquals(io::Printer* printer) {
104 : printer->Print(
105 : variables_,
106 0 : "if(!$name$_.Equals(other.$name$_)) return false;\n");
107 0 : }
108 :
109 0 : void RepeatedEnumFieldGenerator::WriteToString(io::Printer* printer) {
110 : printer->Print(variables_,
111 0 : "PrintField(\"$descriptor_name$\", $name$_, writer);\n");
112 0 : }
113 :
114 0 : void RepeatedEnumFieldGenerator::GenerateCloningCode(io::Printer* printer) {
115 : printer->Print(variables_,
116 0 : "$name$_ = other.$name$_.Clone();\n");
117 0 : }
118 :
119 0 : void RepeatedEnumFieldGenerator::GenerateFreezingCode(io::Printer* printer) {
120 0 : }
121 :
122 : } // namespace csharp
123 : } // namespace compiler
124 : } // namespace protobuf
125 : } // namespace google
|