Commit d7dda2fe authored by Jon Skeet's avatar Jon Skeet

Use an empty array instead of a null reference for an empty repeated field.

parent a0f95693
...@@ -6,25 +6,21 @@ namespace Google.Protobuf.Collections ...@@ -6,25 +6,21 @@ namespace Google.Protobuf.Collections
{ {
public sealed class RepeatedField<T> : IList<T>, IEquatable<RepeatedField<T>> public sealed class RepeatedField<T> : IList<T>, IEquatable<RepeatedField<T>>
{ {
private static readonly T[] EmptyArray = new T[0];
private const int MinArraySize = 8; private const int MinArraySize = 8;
private T[] array = null; private T[] array = EmptyArray;
private int count = 0; private int count = 0;
private void EnsureSize(int size) private void EnsureSize(int size)
{ {
if (array == null) size = Math.Max(size, MinArraySize);
{ if (array.Length < size)
array = new T[Math.Max(size, MinArraySize)];
}
else
{ {
if (array.Length < size) int newSize = Math.Max(array.Length * 2, size);
{ var tmp = new T[newSize];
int newSize = Math.Max(array.Length * 2, size); Array.Copy(array, 0, tmp, 0, array.Length);
var tmp = new T[newSize]; array = tmp;
Array.Copy(array, 0, tmp, 0, array.Length);
array = tmp;
}
} }
} }
...@@ -51,7 +47,7 @@ namespace Google.Protobuf.Collections ...@@ -51,7 +47,7 @@ namespace Google.Protobuf.Collections
public void Clear() public void Clear()
{ {
array = null; array = EmptyArray;
count = 0; count = 0;
} }
...@@ -62,10 +58,6 @@ namespace Google.Protobuf.Collections ...@@ -62,10 +58,6 @@ namespace Google.Protobuf.Collections
public void CopyTo(T[] array, int arrayIndex) public void CopyTo(T[] array, int arrayIndex)
{ {
if (this.array == null)
{
return;
}
Array.Copy(this.array, 0, array, arrayIndex, count); Array.Copy(this.array, 0, array, arrayIndex, count);
} }
...@@ -183,10 +175,6 @@ namespace Google.Protobuf.Collections ...@@ -183,10 +175,6 @@ namespace Google.Protobuf.Collections
{ {
throw new ArgumentNullException("item"); throw new ArgumentNullException("item");
} }
if (array == null)
{
return -1;
}
// TODO(jonskeet): Does this box for enums? // TODO(jonskeet): Does this box for enums?
EqualityComparer<T> comparer = EqualityComparer<T>.Default; EqualityComparer<T> comparer = EqualityComparer<T>.Default;
for (int i = 0; i < count; i++) for (int i = 0; i < count; i++)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment