OLD | NEW |
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 // https://developers.google.com/protocol-buffers/ | 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. |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
85 type_traits_.append("PrimitiveTypeTraits< "); | 85 type_traits_.append("PrimitiveTypeTraits< "); |
86 type_traits_.append(PrimitiveTypeName(descriptor_->cpp_type())); | 86 type_traits_.append(PrimitiveTypeName(descriptor_->cpp_type())); |
87 type_traits_.append(" >"); | 87 type_traits_.append(" >"); |
88 break; | 88 break; |
89 } | 89 } |
90 } | 90 } |
91 | 91 |
92 ExtensionGenerator::~ExtensionGenerator() {} | 92 ExtensionGenerator::~ExtensionGenerator() {} |
93 | 93 |
94 void ExtensionGenerator::GenerateDeclaration(io::Printer* printer) { | 94 void ExtensionGenerator::GenerateDeclaration(io::Printer* printer) { |
95 std::map<string, string> vars; | 95 map<string, string> vars; |
96 vars["extendee" ] = ExtendeeClassName(descriptor_); | 96 vars["extendee" ] = ExtendeeClassName(descriptor_); |
97 vars["number" ] = SimpleItoa(descriptor_->number()); | 97 vars["number" ] = SimpleItoa(descriptor_->number()); |
98 vars["type_traits" ] = type_traits_; | 98 vars["type_traits" ] = type_traits_; |
99 vars["name" ] = descriptor_->name(); | 99 vars["name" ] = descriptor_->name(); |
100 vars["field_type" ] = SimpleItoa(static_cast<int>(descriptor_->type())); | 100 vars["field_type" ] = SimpleItoa(static_cast<int>(descriptor_->type())); |
101 vars["packed" ] = descriptor_->options().packed() ? "true" : "false"; | 101 vars["packed" ] = descriptor_->options().packed() ? "true" : "false"; |
102 vars["constant_name"] = FieldConstantName(descriptor_); | 102 vars["constant_name"] = FieldConstantName(descriptor_); |
103 | 103 |
104 // If this is a class member, it needs to be declared "static". Otherwise, | 104 // If this is a class member, it needs to be declared "static". Otherwise, |
105 // it needs to be "extern". In the latter case, it also needs the DLL | 105 // it needs to be "extern". In the latter case, it also needs the DLL |
(...skipping 15 matching lines...) Expand all Loading... |
121 ); | 121 ); |
122 | 122 |
123 } | 123 } |
124 | 124 |
125 void ExtensionGenerator::GenerateDefinition(io::Printer* printer) { | 125 void ExtensionGenerator::GenerateDefinition(io::Printer* printer) { |
126 // If this is a class member, it needs to be declared in its class scope. | 126 // If this is a class member, it needs to be declared in its class scope. |
127 string scope = (descriptor_->extension_scope() == NULL) ? "" : | 127 string scope = (descriptor_->extension_scope() == NULL) ? "" : |
128 ClassName(descriptor_->extension_scope(), false) + "::"; | 128 ClassName(descriptor_->extension_scope(), false) + "::"; |
129 string name = scope + descriptor_->name(); | 129 string name = scope + descriptor_->name(); |
130 | 130 |
131 std::map<string, string> vars; | 131 map<string, string> vars; |
132 vars["extendee" ] = ExtendeeClassName(descriptor_); | 132 vars["extendee" ] = ExtendeeClassName(descriptor_); |
133 vars["type_traits" ] = type_traits_; | 133 vars["type_traits" ] = type_traits_; |
134 vars["name" ] = name; | 134 vars["name" ] = name; |
135 vars["constant_name"] = FieldConstantName(descriptor_); | 135 vars["constant_name"] = FieldConstantName(descriptor_); |
136 vars["default" ] = DefaultValue(descriptor_); | 136 vars["default" ] = DefaultValue(descriptor_); |
137 vars["field_type" ] = SimpleItoa(static_cast<int>(descriptor_->type())); | 137 vars["field_type" ] = SimpleItoa(static_cast<int>(descriptor_->type())); |
138 vars["packed" ] = descriptor_->options().packed() ? "true" : "false"; | 138 vars["packed" ] = descriptor_->options().packed() ? "true" : "false"; |
139 vars["scope" ] = scope; | 139 vars["scope" ] = scope; |
140 | 140 |
141 if (descriptor_->cpp_type() == FieldDescriptor::CPPTYPE_STRING) { | 141 if (descriptor_->cpp_type() == FieldDescriptor::CPPTYPE_STRING) { |
(...skipping 18 matching lines...) Expand all Loading... |
160 "#endif\n"); | 160 "#endif\n"); |
161 } | 161 } |
162 | 162 |
163 printer->Print(vars, | 163 printer->Print(vars, |
164 "::google::protobuf::internal::ExtensionIdentifier< $extendee$,\n" | 164 "::google::protobuf::internal::ExtensionIdentifier< $extendee$,\n" |
165 " ::google::protobuf::internal::$type_traits$, $field_type$, $packed$ >\n
" | 165 " ::google::protobuf::internal::$type_traits$, $field_type$, $packed$ >\n
" |
166 " $name$($constant_name$, $default$);\n"); | 166 " $name$($constant_name$, $default$);\n"); |
167 } | 167 } |
168 | 168 |
169 void ExtensionGenerator::GenerateRegistration(io::Printer* printer) { | 169 void ExtensionGenerator::GenerateRegistration(io::Printer* printer) { |
170 std::map<string, string> vars; | 170 map<string, string> vars; |
171 vars["extendee" ] = ExtendeeClassName(descriptor_); | 171 vars["extendee" ] = ExtendeeClassName(descriptor_); |
172 vars["number" ] = SimpleItoa(descriptor_->number()); | 172 vars["number" ] = SimpleItoa(descriptor_->number()); |
173 vars["field_type" ] = SimpleItoa(static_cast<int>(descriptor_->type())); | 173 vars["field_type" ] = SimpleItoa(static_cast<int>(descriptor_->type())); |
174 vars["is_repeated"] = descriptor_->is_repeated() ? "true" : "false"; | 174 vars["is_repeated"] = descriptor_->is_repeated() ? "true" : "false"; |
175 vars["is_packed" ] = (descriptor_->is_repeated() && | 175 vars["is_packed" ] = (descriptor_->is_repeated() && |
176 descriptor_->options().packed()) | 176 descriptor_->options().packed()) |
177 ? "true" : "false"; | 177 ? "true" : "false"; |
178 | 178 |
179 switch (descriptor_->cpp_type()) { | 179 switch (descriptor_->cpp_type()) { |
180 case FieldDescriptor::CPPTYPE_ENUM: | 180 case FieldDescriptor::CPPTYPE_ENUM: |
181 printer->Print( | 181 printer->Print(vars, |
182 vars, | 182 "::google::protobuf::internal::ExtensionSet::RegisterEnumExtension(\n" |
183 "::google::protobuf::internal::ExtensionSet::RegisterEnumExtension(\n" | 183 " &$extendee$::default_instance(),\n" |
184 " $extendee$::internal_default_instance(),\n" | 184 " $number$, $field_type$, $is_repeated$, $is_packed$,\n"); |
185 " $number$, $field_type$, $is_repeated$, $is_packed$,\n"); | |
186 printer->Print( | 185 printer->Print( |
187 " &$type$_IsValid);\n", | 186 " &$type$_IsValid);\n", |
188 "type", ClassName(descriptor_->enum_type(), true)); | 187 "type", ClassName(descriptor_->enum_type(), true)); |
189 break; | 188 break; |
190 case FieldDescriptor::CPPTYPE_MESSAGE: | 189 case FieldDescriptor::CPPTYPE_MESSAGE: |
| 190 printer->Print(vars, |
| 191 "::google::protobuf::internal::ExtensionSet::RegisterMessageExtension(\n
" |
| 192 " &$extendee$::default_instance(),\n" |
| 193 " $number$, $field_type$, $is_repeated$, $is_packed$,\n"); |
191 printer->Print( | 194 printer->Print( |
192 vars, | 195 " &$type$::default_instance());\n", |
193 "::google::protobuf::internal::ExtensionSet::RegisterMessageExtension(
\n" | 196 "type", ClassName(descriptor_->message_type(), true)); |
194 " $extendee$::internal_default_instance(),\n" | |
195 " $number$, $field_type$, $is_repeated$, $is_packed$,\n"); | |
196 printer->Print(" $type$::internal_default_instance());\n", "type", | |
197 ClassName(descriptor_->message_type(), true)); | |
198 break; | 197 break; |
199 default: | 198 default: |
200 printer->Print( | 199 printer->Print(vars, |
201 vars, | 200 "::google::protobuf::internal::ExtensionSet::RegisterExtension(\n" |
202 "::google::protobuf::internal::ExtensionSet::RegisterExtension(\n" | 201 " &$extendee$::default_instance(),\n" |
203 " $extendee$::internal_default_instance(),\n" | 202 " $number$, $field_type$, $is_repeated$, $is_packed$);\n"); |
204 " $number$, $field_type$, $is_repeated$, $is_packed$);\n"); | |
205 break; | 203 break; |
206 } | 204 } |
207 } | 205 } |
208 | 206 |
209 } // namespace cpp | 207 } // namespace cpp |
210 } // namespace compiler | 208 } // namespace compiler |
211 } // namespace protobuf | 209 } // namespace protobuf |
212 } // namespace google | 210 } // namespace google |
OLD | NEW |