Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions src/google/protobuf/descriptor.cc
Original file line number Diff line number Diff line change
Expand Up @@ -690,6 +690,22 @@ Descriptor::WellKnownType FindWellKnownType(absl::string_view name) {

} // namespace

FieldDescriptor::CppType FieldDescriptor::TypeToCppType(Type type) {
ABSL_CHECK(type >= 0 && type <= MAX_TYPE) << "Invalid input value.";
return kTypeToCppTypeMap[type];
}

absl::string_view FieldDescriptor::TypeName(Type type) {
ABSL_CHECK(type >= 0 && type <= MAX_TYPE) << "Invalid input value.";
return kTypeToName[type];
}

absl::string_view FieldDescriptor::CppTypeName(CppType cpp_type) {
ABSL_CHECK(cpp_type >= 0 && cpp_type <= MAX_CPPTYPE)
<< "Invalid input value.";
return kCppTypeToName[cpp_type];
}

const FieldDescriptor::CppType
FieldDescriptor::kTypeToCppTypeMap[MAX_TYPE + 1] = {
static_cast<CppType>(0), // 0 is reserved for errors
Expand Down
12 changes: 0 additions & 12 deletions src/google/protobuf/descriptor.h
Original file line number Diff line number Diff line change
Expand Up @@ -3212,18 +3212,6 @@ inline absl::string_view FieldDescriptor::cpp_type_name() const {
return kCppTypeToName[kTypeToCppTypeMap[type()]];
}

inline FieldDescriptor::CppType FieldDescriptor::TypeToCppType(Type type) {
return kTypeToCppTypeMap[type];
}

inline absl::string_view FieldDescriptor::TypeName(Type type) {
return kTypeToName[type];
}

inline absl::string_view FieldDescriptor::CppTypeName(CppType cpp_type) {
return kCppTypeToName[cpp_type];
}

inline bool FieldDescriptor::IsTypePackable(Type field_type) {
return (field_type != FieldDescriptor::TYPE_STRING &&
field_type != FieldDescriptor::TYPE_GROUP &&
Expand Down
91 changes: 63 additions & 28 deletions src/google/protobuf/descriptor_unittest.cc
Original file line number Diff line number Diff line change
Expand Up @@ -3159,24 +3159,28 @@ TEST_F(MiscTest, StaticTypeNames) {

typedef FieldDescriptor FD; // avoid ugly line wrapping

EXPECT_EQ(absl::string_view("double"), FD::TypeName(FD::TYPE_DOUBLE));
EXPECT_EQ(absl::string_view("float"), FD::TypeName(FD::TYPE_FLOAT));
EXPECT_EQ(absl::string_view("int64"), FD::TypeName(FD::TYPE_INT64));
EXPECT_EQ(absl::string_view("uint64"), FD::TypeName(FD::TYPE_UINT64));
EXPECT_EQ(absl::string_view("int32"), FD::TypeName(FD::TYPE_INT32));
EXPECT_EQ(absl::string_view("fixed64"), FD::TypeName(FD::TYPE_FIXED64));
EXPECT_EQ(absl::string_view("fixed32"), FD::TypeName(FD::TYPE_FIXED32));
EXPECT_EQ(absl::string_view("bool"), FD::TypeName(FD::TYPE_BOOL));
EXPECT_EQ(absl::string_view("string"), FD::TypeName(FD::TYPE_STRING));
EXPECT_EQ(absl::string_view("group"), FD::TypeName(FD::TYPE_GROUP));
EXPECT_EQ(absl::string_view("message"), FD::TypeName(FD::TYPE_MESSAGE));
EXPECT_EQ(absl::string_view("bytes"), FD::TypeName(FD::TYPE_BYTES));
EXPECT_EQ(absl::string_view("uint32"), FD::TypeName(FD::TYPE_UINT32));
EXPECT_EQ(absl::string_view("enum"), FD::TypeName(FD::TYPE_ENUM));
EXPECT_EQ(absl::string_view("sfixed32"), FD::TypeName(FD::TYPE_SFIXED32));
EXPECT_EQ(absl::string_view("sfixed64"), FD::TypeName(FD::TYPE_SFIXED64));
EXPECT_EQ(absl::string_view("sint32"), FD::TypeName(FD::TYPE_SINT32));
EXPECT_EQ(absl::string_view("sint64"), FD::TypeName(FD::TYPE_SINT64));
EXPECT_EQ("ERROR", FD::TypeName(FD::Type{}));
EXPECT_EQ("double", FD::TypeName(FD::TYPE_DOUBLE));
EXPECT_EQ("float", FD::TypeName(FD::TYPE_FLOAT));
EXPECT_EQ("int64", FD::TypeName(FD::TYPE_INT64));
EXPECT_EQ("uint64", FD::TypeName(FD::TYPE_UINT64));
EXPECT_EQ("int32", FD::TypeName(FD::TYPE_INT32));
EXPECT_EQ("fixed64", FD::TypeName(FD::TYPE_FIXED64));
EXPECT_EQ("fixed32", FD::TypeName(FD::TYPE_FIXED32));
EXPECT_EQ("bool", FD::TypeName(FD::TYPE_BOOL));
EXPECT_EQ("string", FD::TypeName(FD::TYPE_STRING));
EXPECT_EQ("group", FD::TypeName(FD::TYPE_GROUP));
EXPECT_EQ("message", FD::TypeName(FD::TYPE_MESSAGE));
EXPECT_EQ("bytes", FD::TypeName(FD::TYPE_BYTES));
EXPECT_EQ("uint32", FD::TypeName(FD::TYPE_UINT32));
EXPECT_EQ("enum", FD::TypeName(FD::TYPE_ENUM));
EXPECT_EQ("sfixed32", FD::TypeName(FD::TYPE_SFIXED32));
EXPECT_EQ("sfixed64", FD::TypeName(FD::TYPE_SFIXED64));
EXPECT_EQ("sint32", FD::TypeName(FD::TYPE_SINT32));
EXPECT_EQ("sint64", FD::TypeName(FD::TYPE_SINT64));

EXPECT_DEATH(FD::TypeName(static_cast<FD::Type>(FD::MAX_TYPE + 1)),
"Invalid input value");
}

TEST_F(MiscTest, CppTypes) {
Expand Down Expand Up @@ -3252,16 +3256,47 @@ TEST_F(MiscTest, StaticCppTypeNames) {

typedef FieldDescriptor FD; // avoid ugly line wrapping

EXPECT_EQ(absl::string_view("int32"), FD::CppTypeName(FD::CPPTYPE_INT32));
EXPECT_EQ(absl::string_view("int64"), FD::CppTypeName(FD::CPPTYPE_INT64));
EXPECT_EQ(absl::string_view("uint32"), FD::CppTypeName(FD::CPPTYPE_UINT32));
EXPECT_EQ(absl::string_view("uint64"), FD::CppTypeName(FD::CPPTYPE_UINT64));
EXPECT_EQ(absl::string_view("double"), FD::CppTypeName(FD::CPPTYPE_DOUBLE));
EXPECT_EQ(absl::string_view("float"), FD::CppTypeName(FD::CPPTYPE_FLOAT));
EXPECT_EQ(absl::string_view("bool"), FD::CppTypeName(FD::CPPTYPE_BOOL));
EXPECT_EQ(absl::string_view("enum"), FD::CppTypeName(FD::CPPTYPE_ENUM));
EXPECT_EQ(absl::string_view("string"), FD::CppTypeName(FD::CPPTYPE_STRING));
EXPECT_EQ(absl::string_view("message"), FD::CppTypeName(FD::CPPTYPE_MESSAGE));
EXPECT_EQ("ERROR", FD::CppTypeName(FD::CppType{}));
EXPECT_EQ("int32", FD::CppTypeName(FD::CPPTYPE_INT32));
EXPECT_EQ("int64", FD::CppTypeName(FD::CPPTYPE_INT64));
EXPECT_EQ("uint32", FD::CppTypeName(FD::CPPTYPE_UINT32));
EXPECT_EQ("uint64", FD::CppTypeName(FD::CPPTYPE_UINT64));
EXPECT_EQ("double", FD::CppTypeName(FD::CPPTYPE_DOUBLE));
EXPECT_EQ("float", FD::CppTypeName(FD::CPPTYPE_FLOAT));
EXPECT_EQ("bool", FD::CppTypeName(FD::CPPTYPE_BOOL));
EXPECT_EQ("enum", FD::CppTypeName(FD::CPPTYPE_ENUM));
EXPECT_EQ("string", FD::CppTypeName(FD::CPPTYPE_STRING));
EXPECT_EQ("message", FD::CppTypeName(FD::CPPTYPE_MESSAGE));

EXPECT_DEATH(FD::CppTypeName(static_cast<FD::CppType>(FD::MAX_CPPTYPE + 1)),
"Invalid input value");
}

TEST_F(MiscTest, StaticTypeToCppType) {
typedef FieldDescriptor FD; // avoid ugly line wrapping
//
EXPECT_EQ(FD::CppType{}, FD::TypeToCppType(FD::Type{}));
EXPECT_EQ(FD::CPPTYPE_DOUBLE, FD::TypeToCppType(FD::TYPE_DOUBLE));
EXPECT_EQ(FD::CPPTYPE_FLOAT, FD::TypeToCppType(FD::TYPE_FLOAT));
EXPECT_EQ(FD::CPPTYPE_INT64, FD::TypeToCppType(FD::TYPE_INT64));
EXPECT_EQ(FD::CPPTYPE_UINT64, FD::TypeToCppType(FD::TYPE_UINT64));
EXPECT_EQ(FD::CPPTYPE_INT32, FD::TypeToCppType(FD::TYPE_INT32));
EXPECT_EQ(FD::CPPTYPE_UINT64, FD::TypeToCppType(FD::TYPE_FIXED64));
EXPECT_EQ(FD::CPPTYPE_UINT32, FD::TypeToCppType(FD::TYPE_FIXED32));
EXPECT_EQ(FD::CPPTYPE_BOOL, FD::TypeToCppType(FD::TYPE_BOOL));
EXPECT_EQ(FD::CPPTYPE_STRING, FD::TypeToCppType(FD::TYPE_STRING));
EXPECT_EQ(FD::CPPTYPE_MESSAGE, FD::TypeToCppType(FD::TYPE_GROUP));
EXPECT_EQ(FD::CPPTYPE_MESSAGE, FD::TypeToCppType(FD::TYPE_MESSAGE));
EXPECT_EQ(FD::CPPTYPE_STRING, FD::TypeToCppType(FD::TYPE_BYTES));
EXPECT_EQ(FD::CPPTYPE_UINT32, FD::TypeToCppType(FD::TYPE_UINT32));
EXPECT_EQ(FD::CPPTYPE_ENUM, FD::TypeToCppType(FD::TYPE_ENUM));
EXPECT_EQ(FD::CPPTYPE_INT32, FD::TypeToCppType(FD::TYPE_SFIXED32));
EXPECT_EQ(FD::CPPTYPE_INT64, FD::TypeToCppType(FD::TYPE_SFIXED64));
EXPECT_EQ(FD::CPPTYPE_INT32, FD::TypeToCppType(FD::TYPE_SINT32));
EXPECT_EQ(FD::CPPTYPE_INT64, FD::TypeToCppType(FD::TYPE_SINT64));

EXPECT_DEATH(FD::TypeToCppType(static_cast<FD::Type>(FD::MAX_TYPE + 1)),
"Invalid input value");
}

TEST_F(MiscTest, MessageType) {
Expand Down
Loading