Skip to content

Commit 9a49efc

Browse files
honglookercopybara-github
authored andcommitted
hpb: start re-housing upb-specific components from hpb/extension.h to hpb/backend/upb/extension.h
PiperOrigin-RevId: 783755196
1 parent 58920b0 commit 9a49efc

File tree

6 files changed

+103
-54
lines changed

6 files changed

+103
-54
lines changed

hpb/BUILD

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,7 @@ cc_library(
201201
":ptr",
202202
":status",
203203
"//hpb:arena",
204+
"//hpb/backend/upb:extension",
204205
"//hpb/backend/upb:interop",
205206
"//hpb/internal:message_lock",
206207
"//hpb/internal:template_help",

hpb/backend/upb/BUILD

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,3 +65,20 @@ cc_test(
6565
"@googletest//:gtest_main",
6666
],
6767
)
68+
69+
cc_library(
70+
name = "extension",
71+
srcs = ["extension.cc"],
72+
hdrs = ["extension.h"],
73+
visibility = ["//hpb:__subpackages__"],
74+
deps = [
75+
"//hpb:status",
76+
"//hpb/internal:message_lock",
77+
"//upb/base",
78+
"//upb/mem",
79+
"//upb/message",
80+
"//upb/mini_table",
81+
"@abseil-cpp//absl/log:absl_check",
82+
"@abseil-cpp//absl/status",
83+
],
84+
)

hpb/backend/upb/extension.cc

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
// Protocol Buffers - Google's data interchange format
2+
// Copyright 2024 Google LLC. All rights reserved.
3+
//
4+
// Use of this source code is governed by a BSD-style
5+
// license that can be found in the LICENSE file or at
6+
// https://developers.google.com/open-source/licenses/bsd
7+
8+
#include "upb/mini_table/extension.h"
9+
10+
#include "absl/log/absl_check.h"
11+
#include "absl/status/status.h"
12+
#include "hpb/backend/upb/extension.h"
13+
#include "hpb/internal/message_lock.h"
14+
#include "hpb/status.h"
15+
#include "upb/mem/arena.h"
16+
#include "upb/message/accessors.h"
17+
#include "upb/message/message.h"
18+
19+
namespace hpb::internal {
20+
21+
absl::Status MoveExtension(upb_Message* message, upb_Arena* message_arena,
22+
const upb_MiniTableExtension* ext,
23+
upb_Message* extension, upb_Arena* extension_arena) {
24+
if (message_arena != extension_arena &&
25+
// Try fuse, if fusing is not allowed or fails, create copy of extension.
26+
!upb_Arena_Fuse(message_arena, extension_arena)) {
27+
extension = DeepClone(extension, upb_MiniTableExtension_GetSubMessage(ext),
28+
message_arena);
29+
}
30+
return upb_Message_SetExtension(message, ext, &extension, message_arena)
31+
? absl::OkStatus()
32+
: MessageAllocationError();
33+
}
34+
35+
absl::Status SetExtension(upb_Message* message, upb_Arena* message_arena,
36+
const upb_MiniTableExtension* ext,
37+
const upb_Message* extension) {
38+
// Clone extension into target message arena.
39+
extension = DeepClone(extension, upb_MiniTableExtension_GetSubMessage(ext),
40+
message_arena);
41+
return upb_Message_SetExtension(message, ext, &extension, message_arena)
42+
? absl::OkStatus()
43+
: MessageAllocationError();
44+
}
45+
46+
void SetAliasExtension(upb_Message* message, upb_Arena* message_arena,
47+
const upb_MiniTableExtension* ext,
48+
upb_Message* extension, upb_Arena* extension_arena) {
49+
ABSL_CHECK(upb_Arena_IsFused(message_arena, extension_arena));
50+
upb_Message_SetExtension(message, ext, &extension, message_arena);
51+
}
52+
} // namespace hpb::internal

hpb/backend/upb/extension.h

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
// Protocol Buffers - Google's data interchange format
2+
// Copyright 2024 Google LLC. All rights reserved.
3+
//
4+
// Use of this source code is governed by a BSD-style
5+
// license that can be found in the LICENSE file or at
6+
// https://developers.google.com/open-source/licenses/bsd
7+
8+
#ifndef GOOGLE_PROTOBUF_HPB_BACKEND_UPB_EXTENSION_H__
9+
#define GOOGLE_PROTOBUF_HPB_BACKEND_UPB_EXTENSION_H__
10+
11+
#include "absl/status/status.h"
12+
#include "upb/mem/arena.h"
13+
#include "upb/message/message.h"
14+
#include "upb/mini_table/extension.h"
15+
16+
namespace hpb {
17+
namespace internal {
18+
absl::Status MoveExtension(upb_Message* message, upb_Arena* message_arena,
19+
const upb_MiniTableExtension* ext,
20+
upb_Message* extension, upb_Arena* extension_arena);
21+
22+
absl::Status SetExtension(upb_Message* message, upb_Arena* message_arena,
23+
const upb_MiniTableExtension* ext,
24+
const upb_Message* extension);
25+
26+
void SetAliasExtension(upb_Message* message, upb_Arena* message_arena,
27+
const upb_MiniTableExtension* ext,
28+
upb_Message* extension, upb_Arena* extension_arena);
29+
} // namespace internal
30+
} // namespace hpb
31+
32+
#endif // GOOGLE_PROTOBUF_HPB_BACKEND_UPB_EXTENSION_H__

hpb/extension.cc

Lines changed: 0 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,6 @@
77

88
#include "hpb/extension.h"
99

10-
#include "absl/log/absl_check.h"
11-
#include "absl/status/status.h"
12-
#include "hpb/internal/message_lock.h"
13-
#include "hpb/status.h"
14-
#include "upb/mem/arena.h"
15-
#include "upb/message/accessors.h"
16-
#include "upb/message/message.h"
17-
#include "upb/mini_table/extension.h"
1810
#include "upb/mini_table/extension_registry.h"
1911

2012
namespace hpb {
@@ -24,37 +16,5 @@ upb_ExtensionRegistry* GetUpbExtensions(
2416
return extension_registry.registry_;
2517
}
2618

27-
absl::Status MoveExtension(upb_Message* message, upb_Arena* message_arena,
28-
const upb_MiniTableExtension* ext,
29-
upb_Message* extension, upb_Arena* extension_arena) {
30-
if (message_arena != extension_arena &&
31-
// Try fuse, if fusing is not allowed or fails, create copy of extension.
32-
!upb_Arena_Fuse(message_arena, extension_arena)) {
33-
extension = DeepClone(extension, upb_MiniTableExtension_GetSubMessage(ext),
34-
message_arena);
35-
}
36-
return upb_Message_SetExtension(message, ext, &extension, message_arena)
37-
? absl::OkStatus()
38-
: MessageAllocationError();
39-
}
40-
41-
absl::Status SetExtension(upb_Message* message, upb_Arena* message_arena,
42-
const upb_MiniTableExtension* ext,
43-
const upb_Message* extension) {
44-
// Clone extension into target message arena.
45-
extension = DeepClone(extension, upb_MiniTableExtension_GetSubMessage(ext),
46-
message_arena);
47-
return upb_Message_SetExtension(message, ext, &extension, message_arena)
48-
? absl::OkStatus()
49-
: MessageAllocationError();
50-
}
51-
52-
void SetAliasExtension(upb_Message* message, upb_Arena* message_arena,
53-
const upb_MiniTableExtension* ext,
54-
upb_Message* extension, upb_Arena* extension_arena) {
55-
ABSL_CHECK(upb_Arena_IsFused(message_arena, extension_arena));
56-
upb_Message_SetExtension(message, ext, &extension, message_arena);
57-
}
58-
5919
} // namespace internal
6020
} // namespace hpb

hpb/extension.h

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,13 @@
1616
#include "absl/status/statusor.h"
1717
#include "absl/strings/string_view.h"
1818
#include "hpb/arena.h"
19+
#include "hpb/backend/upb/extension.h"
1920
#include "hpb/backend/upb/interop.h"
2021
#include "hpb/internal/message_lock.h"
2122
#include "hpb/internal/template_help.h"
2223
#include "hpb/ptr.h"
2324
#include "hpb/status.h"
2425
#include "upb/base/string_view.h"
25-
#include "upb/mem/arena.h"
26-
#include "upb/mem/arena.hpp"
2726
#include "upb/message/accessors.h"
2827
#include "upb/message/array.h"
2928
#include "upb/mini_table/extension.h"
@@ -39,18 +38,6 @@ namespace internal {
3938
template <typename Extendee, typename Extension>
4039
class ExtensionIdentifier;
4140

42-
absl::Status MoveExtension(upb_Message* message, upb_Arena* message_arena,
43-
const upb_MiniTableExtension* ext,
44-
upb_Message* extension, upb_Arena* extension_arena);
45-
46-
absl::Status SetExtension(upb_Message* message, upb_Arena* message_arena,
47-
const upb_MiniTableExtension* ext,
48-
const upb_Message* extension);
49-
50-
void SetAliasExtension(upb_Message* message, upb_Arena* message_arena,
51-
const upb_MiniTableExtension* ext,
52-
upb_Message* extension, upb_Arena* extension_arena);
53-
5441
/**
5542
* Trait that maps upb extension types to the corresponding
5643
* return value: ubp_MessageValue.

0 commit comments

Comments
 (0)