From 9bce530117839373c1ca4636363dca22eda72331 Mon Sep 17 00:00:00 2001 From: Hong Shin <hongshin@google.com> Date: Tue, 8 Oct 2024 06:58:18 -0700 Subject: [PATCH] Move hpb::internal::{MoveExtension, SetExtension} and hpb::{MoveExtension, SetExtension} from hpb.h to extension.h This delta makes hpb.cc empty, and was therefore eliminated. PiperOrigin-RevId: 683606379 --- hpb/extension.cc | 32 ++++++++++++++++++ hpb/extension.h | 77 ++++++++++++++++++++++++++++++++++++++++++++ hpb/hpb.cc | 53 ------------------------------ hpb/hpb.h | 84 ------------------------------------------------ 4 files changed, 109 insertions(+), 137 deletions(-) delete mode 100644 hpb/hpb.cc diff --git a/hpb/extension.cc b/hpb/extension.cc index 8938062718..54d350f6b3 100644 --- a/hpb/extension.cc +++ b/hpb/extension.cc @@ -7,6 +7,13 @@ #include "google/protobuf/hpb/extension.h" +#include "absl/status/status.h" +#include "google/protobuf/hpb/internal/message_lock.h" +#include "google/protobuf/hpb/status.h" +#include "upb/mem/arena.h" +#include "upb/message/accessors.h" +#include "upb/message/message.h" +#include "upb/mini_table/extension.h" #include "upb/mini_table/extension_registry.h" namespace hpb { @@ -16,5 +23,30 @@ upb_ExtensionRegistry* GetUpbExtensions( return extension_registry.registry_; } +absl::Status MoveExtension(upb_Message* message, upb_Arena* message_arena, + const upb_MiniTableExtension* ext, + upb_Message* extension, upb_Arena* extension_arena) { + if (message_arena != extension_arena && + // Try fuse, if fusing is not allowed or fails, create copy of extension. + !upb_Arena_Fuse(message_arena, extension_arena)) { + extension = DeepClone(extension, upb_MiniTableExtension_GetSubMessage(ext), + message_arena); + } + return upb_Message_SetExtension(message, ext, &extension, message_arena) + ? absl::OkStatus() + : MessageAllocationError(); +} + +absl::Status SetExtension(upb_Message* message, upb_Arena* message_arena, + const upb_MiniTableExtension* ext, + const upb_Message* extension) { + // Clone extension into target message arena. + extension = DeepClone(extension, upb_MiniTableExtension_GetSubMessage(ext), + message_arena); + return upb_Message_SetExtension(message, ext, &extension, message_arena) + ? absl::OkStatus() + : MessageAllocationError(); +} + } // namespace internal } // namespace hpb diff --git a/hpb/extension.h b/hpb/extension.h index aeb3b8de98..5ede3f5a60 100644 --- a/hpb/extension.h +++ b/hpb/extension.h @@ -25,6 +25,14 @@ class ExtensionRegistry; namespace internal { +absl::Status MoveExtension(upb_Message* message, upb_Arena* message_arena, + const upb_MiniTableExtension* ext, + upb_Message* extension, upb_Arena* extension_arena); + +absl::Status SetExtension(upb_Message* message, upb_Arena* message_arena, + const upb_MiniTableExtension* ext, + const upb_Message* extension); + class ExtensionMiniTableProvider { public: constexpr explicit ExtensionMiniTableProvider( @@ -128,6 +136,75 @@ void ClearExtension( ClearExtension(Ptr(message), id); } +template <typename T, typename Extension, + typename = hpb::internal::EnableIfHpbClass<T>, + typename = hpb::internal::EnableIfMutableProto<T>> +absl::Status SetExtension( + Ptr<T> message, + const ::hpb::internal::ExtensionIdentifier<T, Extension>& id, + const Extension& value) { + static_assert(!std::is_const_v<T>); + auto* message_arena = hpb::interop::upb::GetArena(message); + return ::hpb::internal::SetExtension(hpb::interop::upb::GetMessage(message), + message_arena, id.mini_table_ext(), + hpb::interop::upb::GetMessage(&value)); +} + +template <typename T, typename Extension, + typename = hpb::internal::EnableIfHpbClass<T>, + typename = hpb::internal::EnableIfMutableProto<T>> +absl::Status SetExtension( + Ptr<T> message, + const ::hpb::internal::ExtensionIdentifier<T, Extension>& id, + Ptr<Extension> value) { + static_assert(!std::is_const_v<T>); + auto* message_arena = hpb::interop::upb::GetArena(message); + return ::hpb::internal::SetExtension(hpb::interop::upb::GetMessage(message), + message_arena, id.mini_table_ext(), + hpb::interop::upb::GetMessage(value)); +} + +template <typename T, typename Extension, + typename = hpb::internal::EnableIfHpbClass<T>, + typename = hpb::internal::EnableIfMutableProto<T>> +absl::Status SetExtension( + Ptr<T> message, + const ::hpb::internal::ExtensionIdentifier<T, Extension>& id, + Extension&& value) { + Extension ext = std::move(value); + static_assert(!std::is_const_v<T>); + auto* message_arena = hpb::interop::upb::GetArena(message); + auto* extension_arena = hpb::interop::upb::GetArena(&ext); + return ::hpb::internal::MoveExtension(hpb::interop::upb::GetMessage(message), + message_arena, id.mini_table_ext(), + hpb::interop::upb::GetMessage(&ext), + extension_arena); +} + +template <typename T, typename Extension, + typename = hpb::internal::EnableIfHpbClass<T>> +absl::Status SetExtension( + T* message, const ::hpb::internal::ExtensionIdentifier<T, Extension>& id, + const Extension& value) { + return ::hpb::SetExtension(Ptr(message), id, value); +} + +template <typename T, typename Extension, + typename = hpb::internal::EnableIfHpbClass<T>> +absl::Status SetExtension( + T* message, const ::hpb::internal::ExtensionIdentifier<T, Extension>& id, + Extension&& value) { + return ::hpb::SetExtension(Ptr(message), id, std::forward<Extension>(value)); +} + +template <typename T, typename Extension, + typename = hpb::internal::EnableIfHpbClass<T>> +absl::Status SetExtension( + T* message, const ::hpb::internal::ExtensionIdentifier<T, Extension>& id, + Ptr<Extension> value) { + return ::hpb::SetExtension(Ptr(message), id, value); +} + } // namespace hpb #endif // GOOGLE_PROTOBUF_HPB_EXTENSION_H__ diff --git a/hpb/hpb.cc b/hpb/hpb.cc deleted file mode 100644 index 57163be5bb..0000000000 --- a/hpb/hpb.cc +++ /dev/null @@ -1,53 +0,0 @@ -// Protocol Buffers - Google's data interchange format -// Copyright 2023 Google LLC. All rights reserved. -// -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file or at -// https://developers.google.com/open-source/licenses/bsd - -#include "google/protobuf/hpb/hpb.h" - -#include "absl/status/status.h" -#include "absl/strings/str_format.h" -#include "absl/strings/string_view.h" -#include "google/protobuf/hpb/internal/message_lock.h" -#include "google/protobuf/hpb/status.h" -#include "upb/mem/arena.h" -#include "upb/message/accessors.h" -#include "upb/message/message.h" -#include "upb/mini_table/extension.h" -#include "upb/wire/decode.h" -#include "upb/wire/encode.h" - -namespace hpb { - -namespace internal { - -absl::Status MoveExtension(upb_Message* message, upb_Arena* message_arena, - const upb_MiniTableExtension* ext, - upb_Message* extension, upb_Arena* extension_arena) { - if (message_arena != extension_arena && - // Try fuse, if fusing is not allowed or fails, create copy of extension. - !upb_Arena_Fuse(message_arena, extension_arena)) { - extension = DeepClone(extension, upb_MiniTableExtension_GetSubMessage(ext), - message_arena); - } - return upb_Message_SetExtension(message, ext, &extension, message_arena) - ? absl::OkStatus() - : MessageAllocationError(); -} - -absl::Status SetExtension(upb_Message* message, upb_Arena* message_arena, - const upb_MiniTableExtension* ext, - const upb_Message* extension) { - // Clone extension into target message arena. - extension = DeepClone(extension, upb_MiniTableExtension_GetSubMessage(ext), - message_arena); - return upb_Message_SetExtension(message, ext, &extension, message_arena) - ? absl::OkStatus() - : MessageAllocationError(); -} - -} // namespace internal - -} // namespace hpb diff --git a/hpb/hpb.h b/hpb/hpb.h index 96737c9060..3bdec86824 100644 --- a/hpb/hpb.h +++ b/hpb/hpb.h @@ -11,7 +11,6 @@ #include <cstdint> #include <type_traits> -#include "absl/status/status.h" #include "absl/status/statusor.h" #include "absl/strings/string_view.h" #include "google/protobuf/hpb/arena.h" @@ -22,7 +21,6 @@ #include "google/protobuf/hpb/internal/template_help.h" #include "google/protobuf/hpb/ptr.h" #include "google/protobuf/hpb/status.h" -#include "upb/mem/arena.hpp" #include "upb/mini_table/extension.h" #include "upb/wire/decode.h" @@ -33,93 +31,11 @@ #endif namespace hpb { -class ExtensionRegistry; - -namespace internal { - -absl::Status MoveExtension(upb_Message* message, upb_Arena* message_arena, - const upb_MiniTableExtension* ext, - upb_Message* extension, upb_Arena* extension_arena); - -absl::Status SetExtension(upb_Message* message, upb_Arena* message_arena, - const upb_MiniTableExtension* ext, - const upb_Message* extension); - -} // namespace internal #ifdef HPB_BACKEND_UPB namespace backend = ::hpb::internal::backend::upb; #endif -template <typename T, typename Extension, - typename = hpb::internal::EnableIfHpbClass<T>, - typename = hpb::internal::EnableIfMutableProto<T>> -absl::Status SetExtension( - Ptr<T> message, - const ::hpb::internal::ExtensionIdentifier<T, Extension>& id, - const Extension& value) { - static_assert(!std::is_const_v<T>); - auto* message_arena = hpb::interop::upb::GetArena(message); - return ::hpb::internal::SetExtension(hpb::interop::upb::GetMessage(message), - message_arena, id.mini_table_ext(), - hpb::interop::upb::GetMessage(&value)); -} - -template <typename T, typename Extension, - typename = hpb::internal::EnableIfHpbClass<T>, - typename = hpb::internal::EnableIfMutableProto<T>> -absl::Status SetExtension( - Ptr<T> message, - const ::hpb::internal::ExtensionIdentifier<T, Extension>& id, - Ptr<Extension> value) { - static_assert(!std::is_const_v<T>); - auto* message_arena = hpb::interop::upb::GetArena(message); - return ::hpb::internal::SetExtension(hpb::interop::upb::GetMessage(message), - message_arena, id.mini_table_ext(), - hpb::interop::upb::GetMessage(value)); -} - -template <typename T, typename Extension, - typename = hpb::internal::EnableIfHpbClass<T>, - typename = hpb::internal::EnableIfMutableProto<T>> -absl::Status SetExtension( - Ptr<T> message, - const ::hpb::internal::ExtensionIdentifier<T, Extension>& id, - Extension&& value) { - Extension ext = std::move(value); - static_assert(!std::is_const_v<T>); - auto* message_arena = hpb::interop::upb::GetArena(message); - auto* extension_arena = hpb::interop::upb::GetArena(&ext); - return ::hpb::internal::MoveExtension(hpb::interop::upb::GetMessage(message), - message_arena, id.mini_table_ext(), - hpb::interop::upb::GetMessage(&ext), - extension_arena); -} - -template <typename T, typename Extension, - typename = hpb::internal::EnableIfHpbClass<T>> -absl::Status SetExtension( - T* message, const ::hpb::internal::ExtensionIdentifier<T, Extension>& id, - const Extension& value) { - return ::hpb::SetExtension(Ptr(message), id, value); -} - -template <typename T, typename Extension, - typename = hpb::internal::EnableIfHpbClass<T>> -absl::Status SetExtension( - T* message, const ::hpb::internal::ExtensionIdentifier<T, Extension>& id, - Extension&& value) { - return ::hpb::SetExtension(Ptr(message), id, std::forward<Extension>(value)); -} - -template <typename T, typename Extension, - typename = hpb::internal::EnableIfHpbClass<T>> -absl::Status SetExtension( - T* message, const ::hpb::internal::ExtensionIdentifier<T, Extension>& id, - Ptr<Extension> value) { - return ::hpb::SetExtension(Ptr(message), id, value); -} - template <typename T, typename Extendee, typename Extension, typename = hpb::internal::EnableIfHpbClass<T>> absl::StatusOr<Ptr<const Extension>> GetExtension(