diff options
author | kenton@google.com <kenton@google.com@630680e5-0e50-0410-840e-4b1c322b438d> | 2009-04-18 00:02:12 +0000 |
---|---|---|
committer | kenton@google.com <kenton@google.com@630680e5-0e50-0410-840e-4b1c322b438d> | 2009-04-18 00:02:12 +0000 |
commit | cfa2d8aa87cc0b22b5092a5fb3bf7e394f85cbf1 (patch) | |
tree | 77ee2f4d02dfb43187511f3eb5a37a00c2f6f5de /src/google/protobuf/compiler/cpp/cpp_message.cc | |
parent | eb26a1efdef3f1f5e77807d456a08f3c76cc5207 (diff) | |
download | protobuf-cfa2d8aa87cc0b22b5092a5fb3bf7e394f85cbf1.tar.gz protobuf-cfa2d8aa87cc0b22b5092a5fb3bf7e394f85cbf1.tar.bz2 protobuf-cfa2d8aa87cc0b22b5092a5fb3bf7e394f85cbf1.zip |
Generate field number constants. Patch from Michael Poole.
Diffstat (limited to 'src/google/protobuf/compiler/cpp/cpp_message.cc')
-rw-r--r-- | src/google/protobuf/compiler/cpp/cpp_message.cc | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/src/google/protobuf/compiler/cpp/cpp_message.cc b/src/google/protobuf/compiler/cpp/cpp_message.cc index d2f76803..2ec49234 100644 --- a/src/google/protobuf/compiler/cpp/cpp_message.cc +++ b/src/google/protobuf/compiler/cpp/cpp_message.cc @@ -204,6 +204,8 @@ GenerateFieldAccessorDeclarations(io::Printer* printer) { map<string, string> vars; vars["name"] = FieldName(field); + vars["constant_name"] = FieldConstantName(field); + vars["number"] = SimpleItoa(field->number()); if (field->is_repeated()) { printer->Print(vars, "inline int $name$_size() const;\n"); @@ -212,6 +214,7 @@ GenerateFieldAccessorDeclarations(io::Printer* printer) { } printer->Print(vars, "inline void clear_$name$();\n"); + printer->Print(vars, "static const int $constant_name$ = $number$;\n"); // Generate type-specific accessor declarations. field_generators_.get(field).GenerateAccessorDeclarations(printer); @@ -665,9 +668,21 @@ GenerateClassMethods(io::Printer* printer) { for (int i = 0; i < descriptor_->field_count(); i++) { field_generators_.get(descriptor_->field(i)) .GenerateNonInlineAccessorDefinitions(printer); - printer->Print("\n"); } + // Generate field number constants. + printer->Print("#ifndef _MSC_VER\n"); + for (int i = 0; i < descriptor_->field_count(); i++) { + const FieldDescriptor *field = descriptor_->field(i); + printer->Print( + "const int $classname$::$constant_name$;\n", + "classname", ClassName(FieldScope(field), false), + "constant_name", FieldConstantName(field)); + } + printer->Print( + "#endif // !_MSC_VER\n" + "\n"); + // Define extension identifiers. for (int i = 0; i < descriptor_->extension_count(); i++) { extension_generators_[i]->GenerateDefinition(printer); |