aboutsummaryrefslogtreecommitdiff
path: root/src/google
diff options
context:
space:
mode:
authorJon Skeet <skeet@pobox.com>2015-06-12 11:52:14 +0100
committerJon Skeet <skeet@pobox.com>2015-06-12 11:52:14 +0100
commit5a33827eec75b980fb152c531e4c6b75ce5af015 (patch)
treedf7cb0b09126f11ab1ca905558015d6469107d5b /src/google
parent5685e987112077b2df9fc59acfbfa30f1e3ea38b (diff)
downloadprotobuf-5a33827eec75b980fb152c531e4c6b75ce5af015.tar.gz
protobuf-5a33827eec75b980fb152c531e4c6b75ce5af015.tar.bz2
protobuf-5a33827eec75b980fb152c531e4c6b75ce5af015.zip
Move Count checks into the serialization code
I wouldn't expect this to affect anything, but it appears to.
Diffstat (limited to 'src/google')
-rw-r--r--src/google/protobuf/compiler/csharp/csharp_repeated_enum_field.cc6
-rw-r--r--src/google/protobuf/compiler/csharp/csharp_repeated_message_field.cc4
-rw-r--r--src/google/protobuf/compiler/csharp/csharp_repeated_primitive_field.cc15
3 files changed, 12 insertions, 13 deletions
diff --git a/src/google/protobuf/compiler/csharp/csharp_repeated_enum_field.cc b/src/google/protobuf/compiler/csharp/csharp_repeated_enum_field.cc
index 3fe5ab21..22dec710 100644
--- a/src/google/protobuf/compiler/csharp/csharp_repeated_enum_field.cc
+++ b/src/google/protobuf/compiler/csharp/csharp_repeated_enum_field.cc
@@ -80,11 +80,11 @@ void RepeatedEnumFieldGenerator::GenerateParsingCode(io::Printer* printer) {
}
void RepeatedEnumFieldGenerator::GenerateSerializationCode(io::Printer* printer) {
- // TODO(jonskeet): Originally, this checked for Count > 0 first.
- // The Write* call should make that cheap though - no need to generate it every time.
printer->Print(
variables_,
- "output.Write$packed$EnumArray($number$, $name$_);\n");
+ "if ($name$_.Count > 0) {\n"
+ " output.Write$packed$EnumArray($number$, $name$_);\n"
+ "}\n");
}
void RepeatedEnumFieldGenerator::GenerateSerializedSizeCode(io::Printer* printer) {
diff --git a/src/google/protobuf/compiler/csharp/csharp_repeated_message_field.cc b/src/google/protobuf/compiler/csharp/csharp_repeated_message_field.cc
index d7e4d80f..4b570d3b 100644
--- a/src/google/protobuf/compiler/csharp/csharp_repeated_message_field.cc
+++ b/src/google/protobuf/compiler/csharp/csharp_repeated_message_field.cc
@@ -83,7 +83,9 @@ void RepeatedMessageFieldGenerator::GenerateSerializationCode(io::Printer* print
// The Write* call should make that cheap though - no need to generate it every time.
printer->Print(
variables_,
- "output.WriteMessageArray($number$, $name$_);\n");
+ "if ($name$_.Count > 0) {\n"
+ " output.WriteMessageArray($number$, $name$_);\n"
+ "}\n");
}
void RepeatedMessageFieldGenerator::GenerateSerializedSizeCode(io::Printer* printer) {
diff --git a/src/google/protobuf/compiler/csharp/csharp_repeated_primitive_field.cc b/src/google/protobuf/compiler/csharp/csharp_repeated_primitive_field.cc
index 2dd879fe..a5457785 100644
--- a/src/google/protobuf/compiler/csharp/csharp_repeated_primitive_field.cc
+++ b/src/google/protobuf/compiler/csharp/csharp_repeated_primitive_field.cc
@@ -49,6 +49,7 @@ namespace csharp {
RepeatedPrimitiveFieldGenerator::RepeatedPrimitiveFieldGenerator(
const FieldDescriptor* descriptor, int fieldOrdinal)
: FieldGeneratorBase(descriptor, fieldOrdinal) {
+ variables_["packed"] = descriptor->is_packed() ? "Packed" : "";
}
RepeatedPrimitiveFieldGenerator::~RepeatedPrimitiveFieldGenerator() {
@@ -79,15 +80,11 @@ void RepeatedPrimitiveFieldGenerator::GenerateParsingCode(io::Printer* printer)
void RepeatedPrimitiveFieldGenerator::GenerateSerializationCode(
io::Printer* printer) {
- // TODO(jonskeet): Originally, this checked for Count > 0 first.
- // The Write* call should make that cheap though - no need to generate it every time.
- if (descriptor_->is_packed()) {
- printer->Print(variables_,
- "output.WritePacked$capitalized_type_name$Array($number$, $name$_);\n");
- } else {
- printer->Print(variables_,
- "output.Write$capitalized_type_name$Array($number$, $name$_);\n");
- }
+ printer->Print(
+ variables_,
+ "if ($name$_.Count > 0) {\n"
+ " output.Write$packed$$capitalized_type_name$Array($number$, $name$_);\n"
+ "}\n");
}
void RepeatedPrimitiveFieldGenerator::GenerateSerializedSizeCode(