diff --git a/src/ObservableCollections/FreezedList.cs b/src/ObservableCollections/FreezedList.cs new file mode 100644 index 0000000..ab38ed3 --- /dev/null +++ b/src/ObservableCollections/FreezedList.cs @@ -0,0 +1,249 @@ +//using ObservableCollections.Internal; +//using ObservableCollections; +//using System; +//using System.Collections; +//using System.Collections.Generic; +//using System.Collections.Specialized; +//using System.Linq; +//using System.Runtime.InteropServices; +//using System.Text; +//using System.Threading.Tasks; + +//namespace ObservableCollections +//{ +// public sealed class FreezedList : IReadOnlyList, IFreezedCollection +// { +// readonly IReadOnlyList list; + +// public T this[int index] +// { +// get +// { +// return list[index]; +// } +// } + +// public int Count +// { +// get +// { +// return list.Count; +// } +// } + +// public bool IsReadOnly => true; + +// public FreezedList(IReadOnlyList list) +// { +// this.list = list; +// } + +// public ISynchronizedView CreateView(Func transform, bool reverse = false) +// { +// return new View(this, transform, reverse); +// } + +// public ISortableSynchronizedView CreateSortableView(Func transform) +// { +// return new SortableView(this, transform); +// } + +// public bool Contains(T item) +// { +// return list.Contains(item); +// } + +// public IEnumerator GetEnumerator() +// { +// return list.GetEnumerator(); +// } + +// IEnumerator IEnumerable.GetEnumerator() +// { +// return GetEnumerator(); +// } + +// class View : ISynchronizedView +// { +// readonly bool reverse; +// readonly List<(T, TView)> list; + +// ISynchronizedViewFilter filter; + +// public event Action? CollectionStateChanged; + +// public object SyncRoot { get; } = new object(); + +// public View(FreezedList source, Func selector, bool reverse) +// { +// this.reverse = reverse; +// this.filter = TrueViewFilter.Instance; +// this.list = source.Select(x => (x, selector(x))).ToList(); +// } + +// public int Count +// { +// get +// { +// lock (SyncRoot) +// { +// return list.Count; +// } +// } +// } + +// public void AttachFilter(ISynchronizedViewFilter filter) +// { +// lock (SyncRoot) +// { +// this.filter = filter; +// foreach (var (value, view) in list) +// { +// filter.Invoke(value, view); +// } +// } +// } + +// public void ResetFilter(Action? resetAction) +// { +// lock (SyncRoot) +// { +// this.filter = TrueViewFilter.Instance; +// if (resetAction != null) +// { +// foreach (var (item, view) in list) +// { +// resetAction(item, view); +// } +// } +// } +// } + +// public IEnumerator<(T, TView)> GetEnumerator() +// { +// if (!reverse) +// { +// return new SynchronizedViewEnumerator(SyncRoot, list.GetEnumerator(), filter); +// } +// else +// { +// return new SynchronizedViewEnumerator(SyncRoot, list.AsEnumerable().Reverse().GetEnumerator(), filter); +// } +// } + +// IEnumerator IEnumerable.GetEnumerator() => GetEnumerator(); + +// public void Dispose() +// { + +// } +// } + +// class SortableView : ISortableSynchronizedView +// { +// readonly (T, TView)[] array; + +// ISynchronizedViewFilter filter; + +// public event Action? CollectionStateChanged; + +// public object SyncRoot { get; } = new object(); + +// public SortableView(FreezedList source, Func selector) +// { +// this.filter = TrueViewFilter.Instance; +// this.array = source.Select(x => (x, selector(x))).ToArray(); +// } + +// public int Count +// { +// get +// { +// lock (SyncRoot) +// { +// return array.Length; +// } +// } +// } + +// public void AttachFilter(ISynchronizedViewFilter filter) +// { +// lock (SyncRoot) +// { +// this.filter = filter; +// foreach (var (value, view) in array) +// { +// filter.Invoke(value, view); +// } +// } +// } + +// public void ResetFilter(Action? resetAction) +// { +// lock (SyncRoot) +// { +// this.filter = TrueViewFilter.Instance; +// if (resetAction != null) +// { +// foreach (var (item, view) in array) +// { +// resetAction(item, view); +// } +// } +// } +// } + +// public IEnumerator<(T, TView)> GetEnumerator() +// { +// return new SynchronizedViewEnumerator(SyncRoot, array.AsEnumerable().GetEnumerator(), filter); +// } + +// IEnumerator IEnumerable.GetEnumerator() => GetEnumerator(); + +// public void Dispose() +// { + +// } + +// public void Sort(IComparer comparer) +// { +// Array.Sort(array, new TComparer(comparer)); +// } + +// public void Sort(IComparer viewComparer) +// { +// Array.Sort(array, new TViewComparer(viewComparer)); +// } + +// class TComparer : IComparer<(T, TView)> +// { +// readonly IComparer comparer; + +// public TComparer(IComparer comparer) +// { +// this.comparer = comparer; +// } + +// public int Compare((T, TView) x, (T, TView) y) +// { +// return comparer.Compare(x.Item1, y.Item1); +// } +// } + +// class TViewComparer : IComparer<(T, TView)> +// { +// readonly IComparer comparer; + +// public TViewComparer(IComparer comparer) +// { +// this.comparer = comparer; +// } + +// public int Compare((T, TView) x, (T, TView) y) +// { +// return comparer.Compare(x.Item2, y.Item2); +// } +// } +// } +// } +//} \ No newline at end of file diff --git a/src/ObservableCollections/IObservableCollection.cs b/src/ObservableCollections/IObservableCollection.cs index 0702340..717b8dd 100644 --- a/src/ObservableCollections/IObservableCollection.cs +++ b/src/ObservableCollections/IObservableCollection.cs @@ -18,11 +18,6 @@ namespace ObservableCollections // IGroupedSynchronizedView CreateGroupedView(Func keySelector, Func transform); } - internal interface INotifyCollectionChanged - { - internal event NotifyCollectionChangedEventHandler? CollectionChanged; - } - public interface IFreezedCollection { ISynchronizedView CreateView(Func transform, bool reverse = false);