1 #ifndef GOOGLE_PROTOBUF_HPB_INTERNAL_INTERNAL_H__ 2 #define GOOGLE_PROTOBUF_HPB_INTERNAL_INTERNAL_H__ 3 4 #include <cstdint> 5 6 #include "upb/mem/arena.h" 7 #include "upb/message/message.h" 8 9 namespace hpb::internal { 10 11 struct PrivateAccess { 12 template <typename T> GetInternalMsgPrivateAccess13 static auto* GetInternalMsg(T&& message) { 14 return message->msg(); 15 } 16 template <typename T> GetInternalArenaPrivateAccess17 static auto* GetInternalArena(T&& message) { 18 return message->arena(); 19 } 20 template <typename T> ProxyPrivateAccess21 static auto Proxy(upb_Message* p, upb_Arena* arena) { 22 return typename T::Proxy(p, arena); 23 } 24 template <typename T> CProxyPrivateAccess25 static auto CProxy(const upb_Message* p, upb_Arena* arena) { 26 return typename T::CProxy(p, arena); 27 } 28 template <typename T> CreateMessagePrivateAccess29 static auto CreateMessage(upb_Arena* arena) { 30 return typename T::Proxy(upb_Message_New(T::minitable(), arena), arena); 31 } 32 33 template <typename ExtensionId> GetExtensionNumberPrivateAccess34 static constexpr uint32_t GetExtensionNumber(const ExtensionId& id) { 35 return id.number(); 36 } 37 }; 38 39 } // namespace hpb::internal 40 41 #endif // GOOGLE_PROTOBUF_HPB_INTERNAL_INTERNAL_H__ 42