aboutsummaryrefslogtreecommitdiffhomepage
path: root/csharp/src/AddressBook
diff options
context:
space:
mode:
authorGravatar Jon Skeet <jonskeet@google.com>2015-06-26 17:37:14 +0100
committerGravatar Jon Skeet <jonskeet@google.com>2015-06-30 13:20:30 +0100
commitf2a27cc2c71b4dae3ff230574a73c1de88dd61b7 (patch)
tree58cdbbbd9262732c9a104171f2563f0f2da85acb /csharp/src/AddressBook
parent241e17ba78b71a7ecccb289914ecaeab203b2373 (diff)
First pass (not yet compiling) at removing all the array handling code from Coded*Stream.
Prod code works, but some tests are broken. Obviously those need fixing, then more tests, and review benchmarks.
Diffstat (limited to 'csharp/src/AddressBook')
-rw-r--r--csharp/src/AddressBook/Addressbook.cs30
1 files changed, 10 insertions, 20 deletions
diff --git a/csharp/src/AddressBook/Addressbook.cs b/csharp/src/AddressBook/Addressbook.cs
index c88ca424..4fd46471 100644
--- a/csharp/src/AddressBook/Addressbook.cs
+++ b/csharp/src/AddressBook/Addressbook.cs
@@ -131,6 +131,8 @@ namespace Google.Protobuf.Examples.AddressBook {
}
public const int PhoneFieldNumber = 4;
+ private static readonly pb::FieldCodec<global::Google.Protobuf.Examples.AddressBook.Person.Types.PhoneNumber> _repeated_phone_codec
+ = pb::FieldCodec.ForMessage(34, global::Google.Protobuf.Examples.AddressBook.Person.Types.PhoneNumber.Parser);
private readonly pbc::RepeatedField<global::Google.Protobuf.Examples.AddressBook.Person.Types.PhoneNumber> phone_ = new pbc::RepeatedField<global::Google.Protobuf.Examples.AddressBook.Person.Types.PhoneNumber>();
public pbc::RepeatedField<global::Google.Protobuf.Examples.AddressBook.Person.Types.PhoneNumber> Phone {
get { return phone_; }
@@ -176,9 +178,7 @@ namespace Google.Protobuf.Examples.AddressBook {
output.WriteRawTag(26);
output.WriteString(Email);
}
- if (phone_.Count > 0) {
- output.WriteMessageArray(4, phone_);
- }
+ phone_.WriteTo(output, _repeated_phone_codec);
}
public int CalculateSize() {
@@ -192,12 +192,7 @@ namespace Google.Protobuf.Examples.AddressBook {
if (Email.Length != 0) {
size += 1 + pb::CodedOutputStream.ComputeStringSize(Email);
}
- if (phone_.Count > 0) {
- foreach (global::Google.Protobuf.Examples.AddressBook.Person.Types.PhoneNumber element in phone_) {
- size += pb::CodedOutputStream.ComputeMessageSize(element);
- }
- size += 1 * phone_.Count;
- }
+ size += phone_.CalculateSize(_repeated_phone_codec);
return size;
}
@@ -241,7 +236,7 @@ namespace Google.Protobuf.Examples.AddressBook {
break;
}
case 34: {
- input.ReadMessageArray(phone_, global::Google.Protobuf.Examples.AddressBook.Person.Types.PhoneNumber.Parser);
+ phone_.AddEntriesFrom(input, _repeated_phone_codec);
break;
}
}
@@ -437,6 +432,8 @@ namespace Google.Protobuf.Examples.AddressBook {
}
public const int PersonFieldNumber = 1;
+ private static readonly pb::FieldCodec<global::Google.Protobuf.Examples.AddressBook.Person> _repeated_person_codec
+ = pb::FieldCodec.ForMessage(10, global::Google.Protobuf.Examples.AddressBook.Person.Parser);
private readonly pbc::RepeatedField<global::Google.Protobuf.Examples.AddressBook.Person> person_ = new pbc::RepeatedField<global::Google.Protobuf.Examples.AddressBook.Person>();
public pbc::RepeatedField<global::Google.Protobuf.Examples.AddressBook.Person> Person {
get { return person_; }
@@ -464,19 +461,12 @@ namespace Google.Protobuf.Examples.AddressBook {
}
public void WriteTo(pb::CodedOutputStream output) {
- if (person_.Count > 0) {
- output.WriteMessageArray(1, person_);
- }
+ person_.WriteTo(output, _repeated_person_codec);
}
public int CalculateSize() {
int size = 0;
- if (person_.Count > 0) {
- foreach (global::Google.Protobuf.Examples.AddressBook.Person element in person_) {
- size += pb::CodedOutputStream.ComputeMessageSize(element);
- }
- size += 1 * person_.Count;
- }
+ size += person_.CalculateSize(_repeated_person_codec);
return size;
}
@@ -499,7 +489,7 @@ namespace Google.Protobuf.Examples.AddressBook {
}
break;
case 10: {
- input.ReadMessageArray(person_, global::Google.Protobuf.Examples.AddressBook.Person.Parser);
+ person_.AddEntriesFrom(input, _repeated_person_codec);
break;
}
}