diff options
author | Jon Skeet <jonskeet@google.com> | 2015-06-26 10:32:23 +0100 |
---|---|---|
committer | Jon Skeet <jonskeet@google.com> | 2015-06-26 10:32:23 +0100 |
commit | c12833104f43118d62f73ae9a82cfc7ba50a04b4 (patch) | |
tree | 1bd9c87f4295c7df827e57eefa7f2cc118055f3d /csharp/src/ProtocolBuffers | |
parent | c06226354d89e53c96f69401539ef3208ba4ab44 (diff) | |
download | protobuf-c12833104f43118d62f73ae9a82cfc7ba50a04b4.tar.gz protobuf-c12833104f43118d62f73ae9a82cfc7ba50a04b4.tar.bz2 protobuf-c12833104f43118d62f73ae9a82cfc7ba50a04b4.zip |
Tweaks and more tests for maps
- Change the default message hash code to 1 to be consistent with other code
- Change the empty list/map hash code to 0 as "empty map" is equivalent to "no map"
- Removed map fields from unittest_proto3.proto
- Created map_unittest_proto3.proto which is like map_unittest.proto but proto3-only
- Fixed factory methods in FieldCodec highlighted by using all field types :)
- Added tests for map serialization:
- Extra fields within entries
- Entries with value then key
- Non-contiguous entries for the same map
- Multiple entries for the same key
Changes to generated code coming in next commit
Diffstat (limited to 'csharp/src/ProtocolBuffers')
-rw-r--r-- | csharp/src/ProtocolBuffers/Collections/MapField.cs | 3 | ||||
-rw-r--r-- | csharp/src/ProtocolBuffers/Collections/RepeatedField.cs | 2 | ||||
-rw-r--r-- | csharp/src/ProtocolBuffers/FieldCodec.cs | 14 |
3 files changed, 14 insertions, 5 deletions
diff --git a/csharp/src/ProtocolBuffers/Collections/MapField.cs b/csharp/src/ProtocolBuffers/Collections/MapField.cs index 6834cfbb..9eed833f 100644 --- a/csharp/src/ProtocolBuffers/Collections/MapField.cs +++ b/csharp/src/ProtocolBuffers/Collections/MapField.cs @@ -261,7 +261,7 @@ namespace Google.Protobuf.Collections public override int GetHashCode() { var valueComparer = EqualityComparer<TValue>.Default; - int hash = 19; + int hash = 0; foreach (var pair in list) { hash ^= pair.Key.GetHashCode() * 31 + valueComparer.GetHashCode(pair.Value); @@ -380,7 +380,6 @@ namespace Google.Protobuf.Collections private readonly Codec codec; internal TKey Key { get; set; } internal TValue Value { get; set; } - internal int Size { get; set; } internal MessageAdapter(Codec codec) { diff --git a/csharp/src/ProtocolBuffers/Collections/RepeatedField.cs b/csharp/src/ProtocolBuffers/Collections/RepeatedField.cs index ebfc522f..4d4212cb 100644 --- a/csharp/src/ProtocolBuffers/Collections/RepeatedField.cs +++ b/csharp/src/ProtocolBuffers/Collections/RepeatedField.cs @@ -193,7 +193,7 @@ namespace Google.Protobuf.Collections public override int GetHashCode() { - int hash = 23; + int hash = 0; for (int i = 0; i < count; i++) { hash = hash * 31 + array[i].GetHashCode(); diff --git a/csharp/src/ProtocolBuffers/FieldCodec.cs b/csharp/src/ProtocolBuffers/FieldCodec.cs index 931b54d3..617af2f6 100644 --- a/csharp/src/ProtocolBuffers/FieldCodec.cs +++ b/csharp/src/ProtocolBuffers/FieldCodec.cs @@ -33,11 +33,16 @@ namespace Google.Protobuf return new FieldCodec<int>(input => input.ReadSInt32(), (output, value) => output.WriteSInt32(value), CodedOutputStream.ComputeSInt32Size, tag); } - public static FieldCodec<uint> ForFixedInt32(uint tag) + public static FieldCodec<uint> ForFixed32(uint tag) { return new FieldCodec<uint>(input => input.ReadFixed32(), (output, value) => output.WriteFixed32(value), CodedOutputStream.ComputeFixed32Size, tag); } + public static FieldCodec<int> ForSFixed32(uint tag) + { + return new FieldCodec<int>(input => input.ReadSFixed32(), (output, value) => output.WriteSFixed32(value), CodedOutputStream.ComputeSFixed32Size, tag); + } + public static FieldCodec<uint> ForUInt32(uint tag) { return new FieldCodec<uint>(input => input.ReadUInt32(), (output, value) => output.WriteUInt32(value), CodedOutputStream.ComputeUInt32Size, tag); @@ -53,11 +58,16 @@ namespace Google.Protobuf return new FieldCodec<long>(input => input.ReadSInt64(), (output, value) => output.WriteSInt64(value), CodedOutputStream.ComputeSInt64Size, tag); } - public static FieldCodec<ulong> ForFixedInt64(uint tag) + public static FieldCodec<ulong> ForFixed64(uint tag) { return new FieldCodec<ulong>(input => input.ReadFixed64(), (output, value) => output.WriteFixed64(value), CodedOutputStream.ComputeFixed64Size, tag); } + public static FieldCodec<long> ForSFixed64(uint tag) + { + return new FieldCodec<long>(input => input.ReadSFixed64(), (output, value) => output.WriteSFixed64(value), CodedOutputStream.ComputeSFixed64Size, tag); + } + public static FieldCodec<ulong> ForUInt64(uint tag) { return new FieldCodec<ulong>(input => input.ReadUInt64(), (output, value) => output.WriteUInt64(value), CodedOutputStream.ComputeUInt64Size, tag); |