Skip to content
This repository was archived by the owner on Dec 9, 2025. It is now read-only.

Commit 628c261

Browse files
[Upb C++] Implement RepeatedField
PiperOrigin-RevId: 538944010
1 parent cfb8b3d commit 628c261

13 files changed

Lines changed: 832 additions & 31 deletions

protos/BUILD

Lines changed: 39 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,35 @@ load(
3838

3939
licenses(["notice"])
4040

41+
cc_library(
42+
name = "repeated_field",
43+
hdrs = [
44+
"repeated_field.h",
45+
"repeated_field_iterator.h",
46+
],
47+
copts = UPB_DEFAULT_CPPOPTS,
48+
visibility = ["//visibility:public"],
49+
deps = [
50+
":protos",
51+
":protos_traits",
52+
"//:collections_internal",
53+
"//:message_copy",
54+
"//:mini_table",
55+
"//:port",
56+
"//:upb",
57+
"@com_google_absl//absl/base:core_headers",
58+
"@com_google_absl//absl/strings",
59+
],
60+
)
61+
4162
cc_library(
4263
name = "protos",
43-
srcs = ["protos.cc"],
44-
hdrs = ["protos.h"],
64+
srcs = [
65+
"protos.cc",
66+
],
67+
hdrs = [
68+
"protos.h",
69+
],
4570
copts = UPB_DEFAULT_CPPOPTS,
4671
visibility = ["//visibility:public"],
4772
deps = [
@@ -50,10 +75,21 @@ cc_library(
5075
"//:upb",
5176
"@com_google_absl//absl/status",
5277
"@com_google_absl//absl/status:statusor",
78+
"@com_google_absl//absl/strings",
5379
"@com_google_absl//absl/strings:str_format",
5480
],
5581
)
5682

83+
# Internally used type traits.
84+
cc_library(
85+
name = "protos_traits",
86+
hdrs = [
87+
"protos_traits.h",
88+
],
89+
copts = UPB_DEFAULT_CPPOPTS,
90+
visibility = ["//visibility:private"],
91+
)
92+
5793
cc_library(
5894
name = "protos_internal",
5995
hdrs = ["protos_internal.h"],
@@ -80,6 +116,7 @@ cc_library(
80116
deps = [
81117
":protos",
82118
":protos_internal",
119+
":repeated_field",
83120
],
84121
)
85122

protos/bazel/upb_cc_proto_library.bzl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -286,6 +286,7 @@ _upb_cc_proto_library_aspect = aspect(
286286
"@com_google_absl//absl/strings",
287287
"@com_google_absl//absl/status:statusor",
288288
"//protos",
289+
"//protos:repeated_field",
289290
],
290291
),
291292
}),

protos/protos_traits.h

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
/*
2+
* Copyright (c) 2009-2023, Google LLC
3+
* All rights reserved.
4+
*
5+
* Redistribution and use in source and binary forms, with or without
6+
* modification, are permitted provided that the following conditions are met:
7+
* * Redistributions of source code must retain the above copyright
8+
* notice, this list of conditions and the following disclaimer.
9+
* * Redistributions in binary form must reproduce the above copyright
10+
* notice, this list of conditions and the following disclaimer in the
11+
* documentation and/or other materials provided with the distribution.
12+
* * Neither the name of Google LLC nor the
13+
* names of its contributors may be used to endorse or promote products
14+
* derived from this software without specific prior written permission.
15+
*
16+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17+
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18+
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19+
* ARE DISCLAIMED. IN NO EVENT SHALL Google LLC BE LIABLE FOR ANY DIRECT,
20+
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21+
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22+
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23+
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24+
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25+
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26+
*/
27+
28+
#ifndef THIRD_PARTY_UPB_PROTOS_PROTOS_TRAITS_H_
29+
#define THIRD_PARTY_UPB_PROTOS_PROTOS_TRAITS_H_
30+
31+
#include <type_traits>
32+
33+
namespace protos::internal {
34+
35+
template <typename T, typename T2>
36+
using add_const_if_T_is_const =
37+
std::conditional_t<std::is_const_v<T>, const T2, T2>;
38+
39+
} // namespace protos::internal
40+
41+
#endif // THIRD_PARTY_UPB_PROTOS_PROTOS_TRAITS_H_

0 commit comments

Comments
 (0)