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
{
public sealed class RepeatedField<T> : IList<T>, IEquatable<RepeatedField<T>>
{
private static readonly T[] EmptyArray = new T[0];
private const int MinArraySize = 8;
private T[] array = null;
private T[] array = EmptyArray;
private int count = 0;
private void EnsureSize(int size)
{
if (array == null)
{
array = new T[Math.Max(size, MinArraySize)];
}
else
size = Math.Max(size, MinArraySize);
if (array.Length < size)
{
if (array.Length < size)
{
int newSize = Math.Max(array.Length * 2, size);
var tmp = new T[newSize];
Array.Copy(array, 0, tmp, 0, array.Length);
array = tmp;
}
int newSize = Math.Max(array.Length * 2, size);
var tmp = new T[newSize];
Array.Copy(array, 0, tmp, 0, array.Length);
array = tmp;
}
}
......@@ -51,7 +47,7 @@ namespace Google.Protobuf.Collections
public void Clear()
{
array = null;
array = EmptyArray;
count = 0;
}
......@@ -62,10 +58,6 @@ namespace Google.Protobuf.Collections
public void CopyTo(T[] array, int arrayIndex)
{
if (this.array == null)
{
return;
}
Array.Copy(this.array, 0, array, arrayIndex, count);
}
......@@ -183,10 +175,6 @@ namespace Google.Protobuf.Collections
{
throw new ArgumentNullException("item");
}
if (array == null)
{
return -1;
}
// TODO(jonskeet): Does this box for enums?
EqualityComparer<T> comparer = EqualityComparer<T>.Default;
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