mirror of
https://github.com/protocolbuffers/protobuf
synced 2026-08-26 02:23:14 -04:00
Continue cleaning up after the GLOBALS experiment.
Remove branching for MessageGlobalsBase and the trait. PiperOrigin-RevId: 970537151
This commit is contained in:
parent
9d98477ca9
commit
d3daee4c68
4 changed files with 8 additions and 52 deletions
|
|
@ -247,31 +247,7 @@ PROTOBUF_EXPORT inline const std::string& GetEmptyStringAlreadyInited() {
|
|||
return fixed_address_empty_string.get();
|
||||
}
|
||||
|
||||
#ifndef PROTOBUF_MESSAGE_GLOBALS
|
||||
struct MessageGlobalsBase {
|
||||
template <typename T = MessageLite>
|
||||
static const T* ToDefaultInstance(const void* globals) {
|
||||
return reinterpret_cast<const T*>(globals);
|
||||
}
|
||||
|
||||
static const MessageGlobalsBase* FromDefaultInstance(
|
||||
const void* default_instance) {
|
||||
return reinterpret_cast<const MessageGlobalsBase*>(default_instance);
|
||||
}
|
||||
|
||||
static const MessageGlobalsBase* FromClassData(const ClassData* class_data) {
|
||||
return FromDefaultInstance(class_data->default_instance());
|
||||
}
|
||||
};
|
||||
|
||||
template <const auto* kDefault, const auto* kClassData>
|
||||
struct GeneratedMessageTraitsT {
|
||||
static constexpr const void* default_instance() { return kDefault; }
|
||||
static constexpr const auto* class_data() { return kClassData->base(); }
|
||||
static constexpr const auto* tc_table() { return class_data()->tc_table; }
|
||||
static constexpr auto StrongPointer() { return default_instance(); }
|
||||
};
|
||||
#else
|
||||
// TODO: Remove unnecessary members, or move into ClassData.
|
||||
struct MessageGlobalsBase {
|
||||
template <size_t R, size_t KnownAlignment = 0>
|
||||
static constexpr size_t RoundUpTo(size_t n) {
|
||||
|
|
@ -327,16 +303,9 @@ struct MessageGlobalsBase {
|
|||
|
||||
template <const auto* kGlobals>
|
||||
struct GeneratedMessageTraitsT {
|
||||
static const void* default_instance() {
|
||||
return MessageGlobalsBase::ToDefaultInstance(kGlobals);
|
||||
}
|
||||
static const auto* class_data() {
|
||||
return MessageGlobalsBase::GetClassData(kGlobals);
|
||||
}
|
||||
static const auto* tc_table() {
|
||||
return MessageGlobalsBase::ToParseTableBase(kGlobals);
|
||||
}
|
||||
static constexpr const auto* globals() { return kGlobals; }
|
||||
static constexpr auto StrongPointer() { return kGlobals; }
|
||||
};
|
||||
|
||||
|
|
@ -345,22 +314,12 @@ inline const MessageLite* ClassData::default_instance() const {
|
|||
return MessageGlobalsBase::ToDefaultInstance(this);
|
||||
}
|
||||
|
||||
#endif // PROTOBUF_MESSAGE_GLOBALS
|
||||
|
||||
inline const TcParseTableBase* ClassData::GetTcParseTable() const {
|
||||
#ifdef PROTOBUF_MESSAGE_GLOBALS
|
||||
if (ABSL_PREDICT_FALSE(is_dynamic)) {
|
||||
#else
|
||||
if (ABSL_PREDICT_FALSE(tc_table == nullptr)) {
|
||||
#endif
|
||||
ABSL_DCHECK(!is_lite);
|
||||
return descriptor_methods()->get_tc_table(this);
|
||||
}
|
||||
#ifdef PROTOBUF_MESSAGE_GLOBALS
|
||||
return MessageGlobalsBase::ToParseTableBase(this);
|
||||
#else
|
||||
return tc_table;
|
||||
#endif
|
||||
}
|
||||
|
||||
} // namespace internal
|
||||
|
|
|
|||
|
|
@ -24,18 +24,18 @@ class MessageLite;
|
|||
|
||||
namespace internal {
|
||||
|
||||
struct MessageGlobalsBase;
|
||||
struct ClassData;
|
||||
|
||||
template <typename MessageT>
|
||||
const ClassData* GetClassData(const MessageT& msg);
|
||||
|
||||
template <typename T>
|
||||
template <typename T, typename Globals = MessageGlobalsBase>
|
||||
struct FallbackMessageTraits {
|
||||
static const void* default_instance() { return &T::default_instance(); }
|
||||
static constexpr const auto* class_data() {
|
||||
return GetClassData(static_cast<const MessageLite&>(T::default_instance()));
|
||||
static const auto* class_data() {
|
||||
return Globals::GetClassData(
|
||||
Globals::FromDefaultInstance(&T::default_instance()));
|
||||
}
|
||||
static const auto* tc_table() { return class_data()->GetTcParseTable(); }
|
||||
// We can't make a constexpr pointer to the default, so use a function pointer
|
||||
// instead.
|
||||
static constexpr auto StrongPointer() { return &T::default_instance; }
|
||||
|
|
|
|||
|
|
@ -1672,9 +1672,6 @@ TEST(MESSAGE_TEST_NAME, MOMIParserEdgeCases) {
|
|||
}
|
||||
|
||||
TEST(MESSAGE_TEST_NAME, MessageTraitsWork) {
|
||||
EXPECT_EQ(
|
||||
&UNITTEST::TestAllTypes::default_instance(),
|
||||
internal::MessageTraits<UNITTEST::TestAllTypes>::default_instance());
|
||||
EXPECT_EQ(internal::GetClassData(UNITTEST::TestAllTypes::default_instance()),
|
||||
internal::MessageTraits<UNITTEST::TestAllTypes>::class_data());
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1133,8 +1133,8 @@ class GenericTypeHandler {
|
|||
|
||||
static const Type& default_instance() {
|
||||
static_assert(has_default_instance());
|
||||
return *static_cast<const GenericType*>(
|
||||
MessageTraits<Type>::default_instance());
|
||||
return *reinterpret_cast<const GenericType*>(
|
||||
MessageTraits<Type>::class_data()->default_instance());
|
||||
}
|
||||
static constexpr bool has_default_instance() {
|
||||
return !std::is_same_v<Type, Message> && !std::is_same_v<Type, MessageLite>;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue