| #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__ |