Skip to content

Commit

Permalink
Move hpb::internal::{MoveExtension, SetExtension} and hpb::{MoveExten…
Browse files Browse the repository at this point in the history
…sion, SetExtension} from hpb.h to extension.h

This delta makes hpb.cc empty, and was therefore eliminated.

PiperOrigin-RevId: 683606379
  • Loading branch information
honglooker authored and copybara-github committed Oct 8, 2024
1 parent 9dad0b9 commit 9bce530
Show file tree
Hide file tree
Showing 4 changed files with 109 additions and 137 deletions.
32 changes: 32 additions & 0 deletions hpb/extension.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand All @@ -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
77 changes: 77 additions & 0 deletions hpb/extension.h
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand Down Expand Up @@ -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__
53 changes: 0 additions & 53 deletions hpb/hpb.cc

This file was deleted.

84 changes: 0 additions & 84 deletions hpb/hpb.h
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand All @@ -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"

Expand All @@ -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(
Expand Down

0 comments on commit 9bce530

Please sign in to comment.