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(