aboutsummaryrefslogtreecommitdiff
path: root/src/google/protobuf/compiler/cpp/cpp_message.cc
diff options
context:
space:
mode:
authorkenton@google.com <kenton@google.com@630680e5-0e50-0410-840e-4b1c322b438d>2009-04-18 00:02:12 +0000
committerkenton@google.com <kenton@google.com@630680e5-0e50-0410-840e-4b1c322b438d>2009-04-18 00:02:12 +0000
commitcfa2d8aa87cc0b22b5092a5fb3bf7e394f85cbf1 (patch)
tree77ee2f4d02dfb43187511f3eb5a37a00c2f6f5de /src/google/protobuf/compiler/cpp/cpp_message.cc
parenteb26a1efdef3f1f5e77807d456a08f3c76cc5207 (diff)
downloadprotobuf-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.cc17
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);