hpb: Introduce CloneMessage with hpb::Arena + Deprecate CloneMessage w/ upb_arena*

PiperOrigin-RevId: 712906220
pull/19891/head
Hong Shin 2 months ago committed by Copybara-Service
parent bd87719e46
commit 178f8db655
  1. 11
      hpb/hpb.h
  2. 9
      hpb_generator/tests/test_generated.cc

@ -42,6 +42,17 @@ typename T::Proxy CreateMessage(hpb::Arena& arena) {
} }
template <typename T> template <typename T>
typename T::Proxy CloneMessage(Ptr<T> message, hpb::Arena& arena) {
return hpb::internal::PrivateAccess::Proxy<T>(
hpb::internal::DeepClone(hpb::interop::upb::GetMessage(message),
T::minitable(), arena.ptr()),
arena.ptr());
}
// Deprecated; do not use. There is one extant caller which we plan to migrate.
// Tracking deletion TODO: b/385138477
template <typename T>
[[deprecated("Use CloneMessage(Ptr<T>, hpb::Arena&) instead.")]]
typename T::Proxy CloneMessage(Ptr<T> message, upb_Arena* arena) { typename T::Proxy CloneMessage(Ptr<T> message, upb_Arena* arena) {
return ::hpb::internal::PrivateAccess::Proxy<T>( return ::hpb::internal::PrivateAccess::Proxy<T>(
::hpb::internal::DeepClone(hpb::interop::upb::GetMessage(message), ::hpb::internal::DeepClone(hpb::interop::upb::GetMessage(message),

@ -625,6 +625,15 @@ TEST(CppGeneratedCode, ClearConstMessageShouldFailForConstChild) {
EXPECT_TRUE(CanCallClearMessage<decltype(model.mutable_child_model_1())>()); EXPECT_TRUE(CanCallClearMessage<decltype(model.mutable_child_model_1())>());
} }
TEST(CppGeneratedCode, CloneMessage) {
hpb::Arena arena;
TestModel model;
model.set_str1("Hello World");
auto ptr = hpb::Ptr<TestModel>(&model);
hpb::Ptr<TestModel> cloned_model = hpb::CloneMessage(ptr, arena);
EXPECT_EQ(cloned_model->str1(), "Hello World");
}
TEST(CppGeneratedCode, SetAlias) { TEST(CppGeneratedCode, SetAlias) {
hpb::Arena arena; hpb::Arena arena;
auto child = hpb::CreateMessage<Child>(arena); auto child = hpb::CreateMessage<Child>(arena);

Loading…
Cancel
Save