| #ifndef GOOGLE_PROTOBUF_HPB_INTERNAL_INTERNAL_H__ | |
| #define GOOGLE_PROTOBUF_HPB_INTERNAL_INTERNAL_H__ | |
| #include <cstdint> | |
| #include "upb/mem/arena.h" | |
| #include "upb/message/message.h" | |
| namespace hpb::internal { | |
| struct PrivateAccess { | |
| template <typename T> | |
| static auto* GetInternalMsg(T&& message) { | |
| return message->msg(); | |
| } | |
| template <typename T> | |
| static auto* GetInternalArena(T&& message) { | |
| return message->arena(); | |
| } | |
| template <typename T> | |
| static auto Proxy(upb_Message* p, upb_Arena* arena) { | |
| return typename T::Proxy(p, arena); | |
| } | |
| template <typename T> | |
| static auto CProxy(const upb_Message* p, upb_Arena* arena) { | |
| return typename T::CProxy(p, arena); | |
| } | |
| template <typename T> | |
| static auto CreateMessage(upb_Arena* arena) { | |
| return typename T::Proxy(upb_Message_New(T::minitable(), arena), arena); | |
| } | |
| template <typename ExtensionId> | |
| static constexpr uint32_t GetExtensionNumber(const ExtensionId& id) { | |
| return id.number(); | |
| } | |
| }; | |
| } // namespace hpb::internal | |
| #endif // GOOGLE_PROTOBUF_HPB_INTERNAL_INTERNAL_H__ |