• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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