aboutsummaryrefslogtreecommitdiffhomepage
path: root/csharp/src/Google.Protobuf/Collections
diff options
context:
space:
mode:
authorGravatar Jan Tattermusch <jtattermusch@google.com>2015-07-29 16:05:57 -0700
committerGravatar Jan Tattermusch <jtattermusch@google.com>2015-07-29 20:26:20 -0700
commit3783d9a8add33b240e326438fa0b16869dbcfb44 (patch)
treeda62a6324d13214803065ec47c36867aeae755f5 /csharp/src/Google.Protobuf/Collections
parent74810c6ae3219498dd3e856f9cd251588c92a899 (diff)
remove the freeze API
Diffstat (limited to 'csharp/src/Google.Protobuf/Collections')
-rw-r--r--csharp/src/Google.Protobuf/Collections/MapField.cs34
-rw-r--r--csharp/src/Google.Protobuf/Collections/RepeatedField.cs29
2 files changed, 5 insertions, 58 deletions
diff --git a/csharp/src/Google.Protobuf/Collections/MapField.cs b/csharp/src/Google.Protobuf/Collections/MapField.cs
index 68f2f1cc..0f7227c2 100644
--- a/csharp/src/Google.Protobuf/Collections/MapField.cs
+++ b/csharp/src/Google.Protobuf/Collections/MapField.cs
@@ -50,7 +50,7 @@ namespace Google.Protobuf.Collections
/// </remarks>
/// <typeparam name="TKey">Key type in the map. Must be a type supported by Protocol Buffer map keys.</typeparam>
/// <typeparam name="TValue">Value type in the map. Must be a type supported by Protocol Buffers.</typeparam>
- public sealed class MapField<TKey, TValue> : IDeepCloneable<MapField<TKey, TValue>>, IFreezable, IDictionary<TKey, TValue>, IEquatable<MapField<TKey, TValue>>, IDictionary
+ public sealed class MapField<TKey, TValue> : IDeepCloneable<MapField<TKey, TValue>>, IDictionary<TKey, TValue>, IEquatable<MapField<TKey, TValue>>, IDictionary
{
// TODO: Don't create the map/list until we have an entry. (Assume many maps will be empty.)
private readonly bool allowNullValues;
@@ -119,7 +119,6 @@ namespace Google.Protobuf.Collections
public bool Remove(TKey key)
{
- this.CheckMutable();
ThrowHelper.ThrowIfNull(key, "key");
LinkedListNode<KeyValuePair<TKey, TValue>> node;
if (map.TryGetValue(key, out node))
@@ -169,7 +168,6 @@ namespace Google.Protobuf.Collections
{
ThrowHelper.ThrowIfNull(value, "value");
}
- this.CheckMutable();
LinkedListNode<KeyValuePair<TKey, TValue>> node;
var pair = new KeyValuePair<TKey, TValue>(key, value);
if (map.TryGetValue(key, out node))
@@ -214,7 +212,6 @@ namespace Google.Protobuf.Collections
public void Clear()
{
- this.CheckMutable();
list.Clear();
map.Clear();
}
@@ -233,7 +230,6 @@ namespace Google.Protobuf.Collections
bool ICollection<KeyValuePair<TKey, TValue>>.Remove(KeyValuePair<TKey, TValue> item)
{
- this.CheckMutable();
if (item.Key == null)
{
throw new ArgumentException("Key is null", "item");
@@ -260,31 +256,6 @@ namespace Google.Protobuf.Collections
public int Count { get { return list.Count; } }
public bool IsReadOnly { get { return frozen; } }
- public void Freeze()
- {
- if (IsFrozen)
- {
- return;
- }
- frozen = true;
- // Only values can be frozen, as all the key types are simple.
- // Everything can be done in-place, as we're just freezing objects.
- if (typeof(IFreezable).IsAssignableFrom(typeof(TValue)))
- {
- for (var node = list.First; node != null; node = node.Next)
- {
- var pair = node.Value;
- IFreezable freezableValue = pair.Value as IFreezable;
- if (freezableValue != null)
- {
- freezableValue.Freeze();
- }
- }
- }
- }
-
- public bool IsFrozen { get { return frozen; } }
-
public override bool Equals(object other)
{
return Equals(other as MapField<TKey, TValue>);
@@ -405,7 +376,6 @@ namespace Google.Protobuf.Collections
void IDictionary.Remove(object key)
{
ThrowHelper.ThrowIfNull(key, "key");
- this.CheckMutable();
if (!(key is TKey))
{
return;
@@ -420,7 +390,7 @@ namespace Google.Protobuf.Collections
temp.CopyTo(array, index);
}
- bool IDictionary.IsFixedSize { get { return IsFrozen; } }
+ bool IDictionary.IsFixedSize { get { return false; } }
ICollection IDictionary.Keys { get { return (ICollection)Keys; } }
diff --git a/csharp/src/Google.Protobuf/Collections/RepeatedField.cs b/csharp/src/Google.Protobuf/Collections/RepeatedField.cs
index ccd1a9bb..e7fc0a3f 100644
--- a/csharp/src/Google.Protobuf/Collections/RepeatedField.cs
+++ b/csharp/src/Google.Protobuf/Collections/RepeatedField.cs
@@ -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)
{