From cfa2d8aa87cc0b22b5092a5fb3bf7e394f85cbf1 Mon Sep 17 00:00:00 2001 From: "kenton@google.com" Date: Sat, 18 Apr 2009 00:02:12 +0000 Subject: Generate field number constants. Patch from Michael Poole. --- src/google/protobuf/compiler/cpp/cpp_helpers.cc | 30 +++++++++++++++++++++++++ 1 file changed, 30 insertions(+) (limited to 'src/google/protobuf/compiler/cpp/cpp_helpers.cc') diff --git a/src/google/protobuf/compiler/cpp/cpp_helpers.cc b/src/google/protobuf/compiler/cpp/cpp_helpers.cc index 11122883..d536bea4 100644 --- a/src/google/protobuf/compiler/cpp/cpp_helpers.cc +++ b/src/google/protobuf/compiler/cpp/cpp_helpers.cc @@ -77,6 +77,31 @@ hash_set MakeKeywordsMap() { hash_set kKeywords = MakeKeywordsMap(); +string UnderscoresToCamelCase(const string& input, bool cap_next_letter) { + string result; + // Note: I distrust ctype.h due to locales. + for (int i = 0; i < input.size(); i++) { + if ('a' <= input[i] && input[i] <= 'z') { + if (cap_next_letter) { + result += input[i] + ('A' - 'a'); + } else { + result += input[i]; + } + cap_next_letter = false; + } else if ('A' <= input[i] && input[i] <= 'Z') { + // Capital letters are left as-is. + result += input[i]; + cap_next_letter = false; + } else if ('0' <= input[i] && input[i] <= '9') { + result += input[i]; + cap_next_letter = true; + } else { + cap_next_letter = true; + } + } + return result; +} + } // namespace const char kThickSeparator[] = @@ -124,6 +149,11 @@ string FieldName(const FieldDescriptor* field) { return result; } +string FieldConstantName(const FieldDescriptor *field) { + string field_name = UnderscoresToCamelCase(field->name(), true); + return "k" + field_name + "FieldNumber"; +} + string StripProto(const string& filename) { if (HasSuffixString(filename, ".protodevel")) { return StripSuffixString(filename, ".protodevel"); -- cgit v1.2.3