diff options
Diffstat (limited to 'Rx.NET/System.Reactive.Linq/Reactive/Internal/ImmutableList.cs')
-rw-r--r-- | Rx.NET/System.Reactive.Linq/Reactive/Internal/ImmutableList.cs | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/Rx.NET/System.Reactive.Linq/Reactive/Internal/ImmutableList.cs b/Rx.NET/System.Reactive.Linq/Reactive/Internal/ImmutableList.cs new file mode 100644 index 0000000..5866778 --- /dev/null +++ b/Rx.NET/System.Reactive.Linq/Reactive/Internal/ImmutableList.cs @@ -0,0 +1,49 @@ +namespace System.Reactive +{ + class ImmutableList<T> + { + T[] data; + + public ImmutableList() + { + data = new T[0]; + } + + public ImmutableList(T[] data) + { + this.data = data; + } + + public ImmutableList<T> Add(T value) + { + var newData = new T[data.Length + 1]; + Array.Copy(data, newData, data.Length); + newData[data.Length] = value; + return new ImmutableList<T>(newData); + } + + public ImmutableList<T> Remove(T value) + { + var i = IndexOf(value); + if (i < 0) + return this; + var newData = new T[data.Length - 1]; + Array.Copy(data, 0, newData, 0, i); + Array.Copy(data, i + 1, newData, i, data.Length - i - 1); + return new ImmutableList<T>(newData); + } + + public int IndexOf(T value) + { + for (var i = 0; i < data.Length; ++i) + if (data[i].Equals(value)) + return i; + return -1; + } + + public T[] Data + { + get { return data; } + } + } +} |