|
|
|
@ -43,7 +43,7 @@ namespace Google.Protobuf.Collections |
|
|
|
|
/// restrictions (no null values) and capabilities (deep cloning and freezing). |
|
|
|
|
/// </summary> |
|
|
|
|
/// <typeparam name="T">The element type of the repeated field.</typeparam> |
|
|
|
|
public sealed class RepeatedField<T> : IList<T>, IList, IDeepCloneable<RepeatedField<T>>, IEquatable<RepeatedField<T>>, IFreezable |
|
|
|
|
public sealed class RepeatedField<T> : IList<T>, IList, IDeepCloneable<RepeatedField<T>>, IEquatable<RepeatedField<T>> |
|
|
|
|
{ |
|
|
|
|
private static readonly T[] EmptyArray = new T[0]; |
|
|
|
|
private const int MinArraySize = 8; |
|
|
|
@ -190,21 +190,6 @@ namespace Google.Protobuf.Collections |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public bool IsFrozen { get { return frozen; } } |
|
|
|
|
|
|
|
|
|
public void Freeze() |
|
|
|
|
{ |
|
|
|
|
frozen = true; |
|
|
|
|
IFreezable[] freezableArray = array as IFreezable[]; |
|
|
|
|
if (freezableArray != null) |
|
|
|
|
{ |
|
|
|
|
for (int i = 0; i < count; i++) |
|
|
|
|
{ |
|
|
|
|
freezableArray[i].Freeze(); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void EnsureSize(int size) |
|
|
|
|
{ |
|
|
|
|
if (array.Length < size) |
|
|
|
@ -223,14 +208,12 @@ namespace Google.Protobuf.Collections |
|
|
|
|
{ |
|
|
|
|
throw new ArgumentNullException("item"); |
|
|
|
|
} |
|
|
|
|
this.CheckMutable(); |
|
|
|
|
EnsureSize(count + 1); |
|
|
|
|
array[count++] = item; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public void Clear() |
|
|
|
|
{ |
|
|
|
|
this.CheckMutable(); |
|
|
|
|
array = EmptyArray; |
|
|
|
|
count = 0; |
|
|
|
|
} |
|
|
|
@ -247,7 +230,6 @@ namespace Google.Protobuf.Collections |
|
|
|
|
|
|
|
|
|
public bool Remove(T item) |
|
|
|
|
{ |
|
|
|
|
this.CheckMutable(); |
|
|
|
|
int index = IndexOf(item); |
|
|
|
|
if (index == -1) |
|
|
|
|
{ |
|
|
|
@ -261,7 +243,7 @@ namespace Google.Protobuf.Collections |
|
|
|
|
|
|
|
|
|
public int Count { get { return count; } } |
|
|
|
|
|
|
|
|
|
public bool IsReadOnly { get { return IsFrozen; } } |
|
|
|
|
public bool IsReadOnly { get { return false; } } |
|
|
|
|
|
|
|
|
|
public void Add(RepeatedField<T> values) |
|
|
|
|
{ |
|
|
|
@ -269,7 +251,6 @@ namespace Google.Protobuf.Collections |
|
|
|
|
{ |
|
|
|
|
throw new ArgumentNullException("values"); |
|
|
|
|
} |
|
|
|
|
this.CheckMutable(); |
|
|
|
|
EnsureSize(count + values.count); |
|
|
|
|
// We know that all the values will be valid, because it's a RepeatedField. |
|
|
|
|
Array.Copy(values.array, 0, array, count, values.count); |
|
|
|
@ -282,7 +263,6 @@ namespace Google.Protobuf.Collections |
|
|
|
|
{ |
|
|
|
|
throw new ArgumentNullException("values"); |
|
|
|
|
} |
|
|
|
|
this.CheckMutable(); |
|
|
|
|
// TODO: Check for ICollection and get the Count? |
|
|
|
|
foreach (T item in values) |
|
|
|
|
{ |
|
|
|
@ -372,7 +352,6 @@ namespace Google.Protobuf.Collections |
|
|
|
|
{ |
|
|
|
|
throw new ArgumentOutOfRangeException("index"); |
|
|
|
|
} |
|
|
|
|
this.CheckMutable(); |
|
|
|
|
EnsureSize(count + 1); |
|
|
|
|
Array.Copy(array, index, array, index + 1, count - index); |
|
|
|
|
array[index] = item; |
|
|
|
@ -385,7 +364,6 @@ namespace Google.Protobuf.Collections |
|
|
|
|
{ |
|
|
|
|
throw new ArgumentOutOfRangeException("index"); |
|
|
|
|
} |
|
|
|
|
this.CheckMutable(); |
|
|
|
|
Array.Copy(array, index + 1, array, index, count - index - 1); |
|
|
|
|
count--; |
|
|
|
|
array[count] = default(T); |
|
|
|
@ -407,7 +385,6 @@ namespace Google.Protobuf.Collections |
|
|
|
|
{ |
|
|
|
|
throw new ArgumentOutOfRangeException("index"); |
|
|
|
|
} |
|
|
|
|
this.CheckMutable(); |
|
|
|
|
if (value == null) |
|
|
|
|
{ |
|
|
|
|
throw new ArgumentNullException("value"); |
|
|
|
@ -417,7 +394,7 @@ namespace Google.Protobuf.Collections |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#region Explicit interface implementation for IList and ICollection. |
|
|
|
|
bool IList.IsFixedSize { get { return IsFrozen; } } |
|
|
|
|
bool IList.IsFixedSize { get { return false; } } |
|
|
|
|
|
|
|
|
|
void ICollection.CopyTo(Array array, int index) |
|
|
|
|
{ |
|
|
|
|