Skip to content

Commit 2914ef5

Browse files
Adopt std::vector idiomatically for passing an owned array around.
PiperOrigin-RevId: 865929752
1 parent 0f79fec commit 2914ef5

File tree

6 files changed

+16
-15
lines changed

6 files changed

+16
-15
lines changed

src/google/protobuf/compiler/java/full/message.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -564,7 +564,7 @@ void ImmutableMessageGenerator::Generate(io::Printer* printer) {
564564

565565
void ImmutableMessageGenerator::GenerateMessageSerializationMethods(
566566
io::Printer* printer) {
567-
std::unique_ptr<const FieldDescriptor*[]> sorted_fields(
567+
std::vector<const FieldDescriptor*> sorted_fields(
568568
SortFieldsByNumber(descriptor_));
569569

570570
printer->Print(
@@ -599,7 +599,7 @@ void ImmutableMessageGenerator::GenerateMessageSerializationMethods(
599599

600600
GenerateSerializeFieldsAndExtensions(printer,
601601
field_generators_.field_generators(),
602-
descriptor_, sorted_fields.get());
602+
descriptor_, sorted_fields);
603603

604604
if (descriptor_->options().message_set_wire_format()) {
605605
printer->Print("getUnknownFields().writeAsMessageSetTo(output);\n");

src/google/protobuf/compiler/java/full/message_builder.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -710,7 +710,7 @@ void MessageBuilderGenerator::GenerateBuilderParsingMethods(
710710

711711
void MessageBuilderGenerator::GenerateBuilderFieldParsingCases(
712712
io::Printer* printer) {
713-
std::unique_ptr<const FieldDescriptor*[]> sorted_fields(
713+
std::vector<const FieldDescriptor*> sorted_fields(
714714
SortFieldsByNumber(descriptor_));
715715
for (int i = 0; i < descriptor_->field_count(); i++) {
716716
const FieldDescriptor* field = sorted_fields[i];

src/google/protobuf/compiler/java/helpers.cc

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -781,14 +781,13 @@ int FixedSize(FieldDescriptor::Type type) {
781781

782782
// Sort the fields of the given Descriptor by number into a new[]'d array
783783
// and return it. The caller should delete the returned array.
784-
const FieldDescriptor** SortFieldsByNumber(const Descriptor* descriptor) {
785-
const FieldDescriptor** fields =
786-
new const FieldDescriptor*[descriptor->field_count()];
787-
for (int i = 0; i < descriptor->field_count(); i++) {
784+
std::vector<const FieldDescriptor*> SortFieldsByNumber(
785+
const Descriptor* descriptor) {
786+
std::vector<const FieldDescriptor*> fields(descriptor->field_count());
787+
for (int i = 0; i < descriptor->field_count(); ++i) {
788788
fields[i] = descriptor->field(i);
789789
}
790-
std::sort(fields, fields + descriptor->field_count(),
791-
FieldOrderingByNumber());
790+
std::sort(fields.begin(), fields.end(), FieldOrderingByNumber());
792791
return fields;
793792
}
794793

src/google/protobuf/compiler/java/helpers.h

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414

1515
#include <cstdint>
1616
#include <string>
17+
#include <vector>
1718

1819
#include "absl/status/status.h"
1920
#include "absl/strings/string_view.h"
@@ -325,9 +326,9 @@ struct ExtensionRangeOrdering {
325326
}
326327
};
327328

328-
// Sort the fields of the given Descriptor by number into a new[]'d array
329-
// and return it. The caller should delete the returned array.
330-
const FieldDescriptor** SortFieldsByNumber(const Descriptor* descriptor);
329+
// Sort the fields of the given Descriptor by number into the vector.
330+
std::vector<const FieldDescriptor*> SortFieldsByNumber(
331+
const Descriptor* descriptor);
331332

332333
// Does this message class have any packed fields?
333334
inline bool HasPackedFields(const Descriptor* descriptor) {

src/google/protobuf/compiler/java/lite/message.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -531,7 +531,7 @@ void ImmutableMessageLiteGenerator::GenerateDynamicMethodNewBuildMessageInfo(
531531

532532
int map_count = 0;
533533
int repeated_count = 0;
534-
std::unique_ptr<const FieldDescriptor*[]> sorted_fields(
534+
std::vector<const FieldDescriptor*> sorted_fields(
535535
SortFieldsByNumber(descriptor_));
536536
for (int i = 0; i < descriptor_->field_count(); i++) {
537537
const FieldDescriptor* field = sorted_fields[i];

src/google/protobuf/compiler/java/message_serialization.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,9 @@ void GenerateSerializeExtensionRange(io::Printer* printer,
3232
// number.
3333
inline void GenerateSerializeFieldsAndExtensions(
3434
io::Printer* printer,
35-
const std::vector<const FieldGenerator*>& field_generators,
36-
const Descriptor* descriptor, const FieldDescriptor** sorted_fields) {
35+
absl::Span<const FieldGenerator* const> field_generators,
36+
const Descriptor* descriptor,
37+
absl::Span<const FieldDescriptor* const> sorted_fields) {
3738
std::vector<const Descriptor::ExtensionRange*> sorted_extensions;
3839
sorted_extensions.reserve(descriptor->extension_range_count());
3940
for (int i = 0; i < descriptor->extension_range_count(); ++i) {

0 commit comments

Comments
 (0)