From f549fc3ccc4ea096fcbc66f74c763880cd26e451 Mon Sep 17 00:00:00 2001 From: Protobuf Team Bot Date: Tue, 22 Oct 2024 01:53:29 -0700 Subject: [PATCH] Simplify proto2::(anonymous namespace)::FlatAllocatorImpl::GetFieldNameCase and reuse absl's ascii lower/uppercasing. By just checking for upper-cased characters, rather than digits and lower-cased characters, we have to perform fewer comparisons. This should be safe because absl::AsciiStrToLower only operates on upper-case characters. PiperOrigin-RevId: 688453016 --- src/google/protobuf/descriptor.cc | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/src/google/protobuf/descriptor.cc b/src/google/protobuf/descriptor.cc index 45d7f117f677..637921b0ce92 100644 --- a/src/google/protobuf/descriptor.cc +++ b/src/google/protobuf/descriptor.cc @@ -552,21 +552,17 @@ class FlatAllocatorImpl { return pointers_.template Get() != nullptr; } - static bool IsLower(char c) { return 'a' <= c && c <= 'z'; } - static bool IsDigit(char c) { return '0' <= c && c <= '9'; } - static bool IsLowerOrDigit(char c) { return IsLower(c) || IsDigit(c); } - enum class FieldNameCase { kAllLower, kSnakeCase, kOther }; FieldNameCase GetFieldNameCase(const absl::string_view name) { - if (!name.empty() && !IsLower(name[0])) return FieldNameCase::kOther; + if (!name.empty() && !absl::ascii_islower(name[0])) { + return FieldNameCase::kOther; + } FieldNameCase best = FieldNameCase::kAllLower; for (char c : name) { - if (IsLowerOrDigit(c)) { - // nothing to do + if (absl::ascii_isupper(c)) { + return FieldNameCase::kOther; } else if (c == '_') { best = FieldNameCase::kSnakeCase; - } else { - return FieldNameCase::kOther; } } return best;