Skip to content

Commit 6643af3

Browse files
ClaytonKnittelcopybara-github
authored andcommitted
Access fields_ via helper in UnknownFieldSet.
This is in preparation for a change that will conditionally use a different container type for `fields_` in `UnknownFieldSet`. PiperOrigin-RevId: 819441394
1 parent b8e690a commit 6643af3

File tree

2 files changed

+46
-33
lines changed

2 files changed

+46
-33
lines changed

src/google/protobuf/unknown_field_set.cc

Lines changed: 37 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -36,22 +36,24 @@ namespace google {
3636
namespace protobuf {
3737

3838
void UnknownFieldSet::ClearFallback() {
39-
ABSL_DCHECK(!fields_.empty());
39+
auto& fields = this->fields();
40+
ABSL_DCHECK(!fields.empty());
4041
if (arena() == nullptr) {
41-
int n = fields_.size();
42+
int n = fields.size();
4243
do {
43-
(fields_)[--n].Delete();
44+
fields[--n].Delete();
4445
} while (n > 0);
4546
}
46-
fields_.Clear();
47+
fields.Clear();
4748
}
4849

4950
void UnknownFieldSet::MergeFrom(const UnknownFieldSet& other) {
5051
int other_field_count = other.field_count();
5152
if (other_field_count > 0) {
52-
fields_.Reserve(fields_.size() + other_field_count);
53-
for (auto elem : other.fields_) {
54-
fields_.Add(elem.DeepCopy(arena()));
53+
auto& fields = this->fields();
54+
fields.Reserve(fields.size() + other_field_count);
55+
for (auto elem : other.fields()) {
56+
fields.Add(elem.DeepCopy(arena()));
5557
}
5658
}
5759
}
@@ -61,11 +63,16 @@ void UnknownFieldSet::MergeFrom(const UnknownFieldSet& other) {
6163
void UnknownFieldSet::MergeFromAndDestroy(UnknownFieldSet* other) {
6264
if (arena() != other->arena()) {
6365
MergeFrom(*other);
64-
} else if (fields_.empty()) {
65-
fields_.Swap(&other->fields_);
66+
return;
67+
}
68+
69+
auto& fields = this->fields();
70+
auto& other_fields = other->fields();
71+
if (fields.empty()) {
72+
fields.Swap(&other_fields);
6673
} else {
67-
fields_.MergeFrom(other->fields_);
68-
other->fields_.Clear();
74+
fields.MergeFrom(other_fields);
75+
other_fields.Clear();
6976
}
7077
}
7178

@@ -75,11 +82,12 @@ void UnknownFieldSet::MergeToInternalMetadata(
7582
}
7683

7784
size_t UnknownFieldSet::SpaceUsedExcludingSelfLong() const {
78-
if (fields_.empty()) return 0;
85+
auto& fields = this->fields();
86+
if (fields.empty()) return 0;
7987

80-
size_t total_size = fields_.SpaceUsedExcludingSelfLong();
88+
size_t total_size = fields.SpaceUsedExcludingSelfLong();
8189

82-
for (const UnknownField& field : fields_) {
90+
for (const UnknownField& field : fields) {
8391
switch (field.type()) {
8492
case UnknownField::TYPE_LENGTH_DELIMITED:
8593
total_size += sizeof(*field.data_.string_value) +
@@ -101,21 +109,21 @@ size_t UnknownFieldSet::SpaceUsedLong() const {
101109
}
102110

103111
void UnknownFieldSet::AddVarint(int number, uint64_t value) {
104-
auto& field = *fields_.Add();
112+
auto& field = *fields().Add();
105113
field.number_ = number;
106114
field.SetType(UnknownField::TYPE_VARINT);
107115
field.data_.varint = value;
108116
}
109117

110118
void UnknownFieldSet::AddFixed32(int number, uint32_t value) {
111-
auto& field = *fields_.Add();
119+
auto& field = *fields().Add();
112120
field.number_ = number;
113121
field.SetType(UnknownField::TYPE_FIXED32);
114122
field.data_.fixed32 = value;
115123
}
116124

117125
void UnknownFieldSet::AddFixed64(int number, uint64_t value) {
118-
auto& field = *fields_.Add();
126+
auto& field = *fields().Add();
119127
field.number_ = number;
120128
field.SetType(UnknownField::TYPE_FIXED64);
121129
field.data_.fixed64 = value;
@@ -127,7 +135,7 @@ void UnknownFieldSet::AddLengthDelimited(int number, const absl::Cord& value) {
127135

128136
template <int&...>
129137
void UnknownFieldSet::AddLengthDelimited(int number, std::string&& value) {
130-
auto& field = *fields_.Add();
138+
auto& field = *fields().Add();
131139
field.number_ = number;
132140
field.SetType(UnknownField::TYPE_LENGTH_DELIMITED);
133141
field.data_.string_value =
@@ -136,51 +144,53 @@ void UnknownFieldSet::AddLengthDelimited(int number, std::string&& value) {
136144
template void UnknownFieldSet::AddLengthDelimited(int, std::string&&);
137145

138146
std::string* UnknownFieldSet::AddLengthDelimited(int number) {
139-
auto& field = *fields_.Add();
147+
auto& field = *fields().Add();
140148
field.number_ = number;
141149
field.SetType(UnknownField::TYPE_LENGTH_DELIMITED);
142150
field.data_.string_value = Arena::Create<std::string>(arena());
143151
return field.data_.string_value;
144152
}
145153

146154
UnknownFieldSet* UnknownFieldSet::AddGroup(int number) {
147-
auto& field = *fields_.Add();
155+
auto& field = *fields().Add();
148156
field.number_ = number;
149157
field.SetType(UnknownField::TYPE_GROUP);
150158
field.data_.group = Arena::Create<UnknownFieldSet>(arena());
151159
return field.data_.group;
152160
}
153161

154162
void UnknownFieldSet::AddField(const UnknownField& field) {
155-
fields_.Add(field.DeepCopy(arena()));
163+
fields().Add(field.DeepCopy(arena()));
156164
}
157165

158166
void UnknownFieldSet::DeleteSubrange(int start, int num) {
167+
auto& fields = this->fields();
159168
if (arena() == nullptr) {
160169
// Delete the specified fields.
161170
for (int i = 0; i < num; ++i) {
162-
(fields_)[i + start].Delete();
171+
fields[i + start].Delete();
163172
}
164173
}
165-
fields_.ExtractSubrange(start, num, nullptr);
174+
fields.ExtractSubrange(start, num, nullptr);
166175
}
167176

168177
void UnknownFieldSet::DeleteByNumber(int number) {
178+
auto& fields = this->fields();
169179
int left = 0; // The number of fields left after deletion.
170-
for (int i = 0; i < fields_.size(); ++i) {
171-
UnknownField* field = &(fields_)[i];
180+
for (int i = 0; i < fields.size(); ++i) {
181+
UnknownField* field = &fields[i];
172182
if (field->number() == number) {
173183
if (arena() == nullptr) {
174184
field->Delete();
175185
}
176186
} else {
177187
if (i != left) {
178-
(fields_)[left] = (fields_)[i];
188+
fields[left] = fields[i];
179189
}
180190
++left;
181191
}
182192
}
183-
fields_.Truncate(left);
193+
fields.Truncate(left);
184194
}
185195

186196
bool UnknownFieldSet::MergeFromCodedStream(io::CodedInputStream* input) {

src/google/protobuf/unknown_field_set.h

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -254,6 +254,9 @@ class PROTOBUF_EXPORT UnknownFieldSet {
254254

255255
Arena* arena() { return fields_.GetArena(); }
256256

257+
const RepeatedField<UnknownField>& fields() const { return fields_; }
258+
RepeatedField<UnknownField>& fields() { return fields_; }
259+
257260
void ClearFallback();
258261
void SwapSlow(UnknownFieldSet* other);
259262

@@ -332,31 +335,31 @@ inline const UnknownFieldSet& UnknownFieldSet::default_instance() {
332335
inline void UnknownFieldSet::ClearAndFreeMemory() { Clear(); }
333336

334337
inline void UnknownFieldSet::Clear() {
335-
if (!fields_.empty()) {
338+
if (!fields().empty()) {
336339
ClearFallback();
337340
}
338341
if (v2_data_ != nullptr) v2_data_->clear();
339342
}
340343

341-
inline bool UnknownFieldSet::empty() const { return fields_.empty(); }
344+
inline bool UnknownFieldSet::empty() const { return fields().empty(); }
342345

343346
inline void UnknownFieldSet::Swap(UnknownFieldSet* x) {
344347
if (arena() == x->arena()) {
345-
fields_.Swap(&x->fields_);
348+
fields().Swap(&x->fields());
346349
} else {
347350
// We might need to do a deep copy, so use Merge instead
348351
SwapSlow(x);
349352
}
350353
}
351354

352355
inline int UnknownFieldSet::field_count() const {
353-
return static_cast<int>(fields_.size());
356+
return static_cast<int>(fields().size());
354357
}
355358
inline const UnknownField& UnknownFieldSet::field(int index) const {
356-
return (fields_)[static_cast<size_t>(index)];
359+
return (fields())[static_cast<size_t>(index)];
357360
}
358361
inline UnknownField* UnknownFieldSet::mutable_field(int index) {
359-
return &(fields_)[static_cast<size_t>(index)];
362+
return &(fields())[static_cast<size_t>(index)];
360363
}
361364

362365
inline void UnknownFieldSet::AddLengthDelimited(int number,

0 commit comments

Comments
 (0)