Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/rx.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'Rx.NET/System.Reactive.Linq/Reactive/Internal/ImmutableList.cs')
-rw-r--r--Rx.NET/System.Reactive.Linq/Reactive/Internal/ImmutableList.cs49
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; }
+ }
+ }
+}