v
This commit is contained in:
parent
f94156f564
commit
b618f509ad
@ -155,43 +155,40 @@ namespace ObservableCollections
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case NotifyCollectionChangedAction.Remove:
|
case NotifyCollectionChangedAction.Remove:
|
||||||
if (e.IsSingleItem)
|
// starting from 0 is RemoveFirst
|
||||||
|
if (e.OldStartingIndex == 0)
|
||||||
{
|
{
|
||||||
var v = ringBuffer[e.OldStartingIndex];
|
// RemoveFirst
|
||||||
ringBuffer.RemoveAt(e.OldStartingIndex);
|
if (e.IsSingleItem)
|
||||||
filter.InvokeOnRemove(v.Item1, v.Item2);
|
{
|
||||||
|
var v = ringBuffer.RemoveFirst();
|
||||||
|
filter.InvokeOnRemove(v);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for (int i = 0; i < e.OldItems.Length; i++)
|
||||||
|
{
|
||||||
|
var v = ringBuffer.RemoveFirst();
|
||||||
|
filter.InvokeOnRemove(v);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
var len = e.OldStartingIndex + e.OldItems.Length;
|
// RemoveLast
|
||||||
for (int i = e.OldStartingIndex; i < len; i++)
|
if (e.IsSingleItem)
|
||||||
{
|
{
|
||||||
var v = ringBuffer[i];
|
var v = ringBuffer.RemoveLast();
|
||||||
filter.InvokeOnRemove(v.Item1, v.Item2);
|
filter.InvokeOnRemove(v);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for (int i = 0; i < e.OldItems.Length; i++)
|
||||||
|
{
|
||||||
|
var v = ringBuffer.RemoveLast();
|
||||||
|
filter.InvokeOnRemove(v);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ringBuffer.RemoveRange(e.OldStartingIndex, e.OldItems.Length);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case NotifyCollectionChangedAction.Replace:
|
|
||||||
// ObservableList does not support replace range
|
|
||||||
{
|
|
||||||
var v = (e.NewItem, selector(e.NewItem));
|
|
||||||
|
|
||||||
var oldItem = ringBuffer[e.NewStartingIndex];
|
|
||||||
ringBuffer[e.NewStartingIndex] = v;
|
|
||||||
|
|
||||||
filter.InvokeOnRemove(oldItem);
|
|
||||||
filter.InvokeOnAdd(v);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case NotifyCollectionChangedAction.Move:
|
|
||||||
{
|
|
||||||
var removeItem = ringBuffer[e.OldStartingIndex];
|
|
||||||
ringBuffer.RemoveAt(e.OldStartingIndex);
|
|
||||||
ringBuffer.Insert(e.NewStartingIndex, removeItem);
|
|
||||||
|
|
||||||
filter.InvokeOnMove(removeItem);
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case NotifyCollectionChangedAction.Reset:
|
case NotifyCollectionChangedAction.Reset:
|
||||||
@ -204,6 +201,8 @@ namespace ObservableCollections
|
|||||||
}
|
}
|
||||||
ringBuffer.Clear();
|
ringBuffer.Clear();
|
||||||
break;
|
break;
|
||||||
|
case NotifyCollectionChangedAction.Replace:
|
||||||
|
case NotifyCollectionChangedAction.Move:
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -160,8 +160,27 @@ namespace ObservableCollections
|
|||||||
CollectionChanged?.Invoke(NotifyCollectionChangedEventArgs<T>.Add(value, buffer.Count - 1));
|
CollectionChanged?.Invoke(NotifyCollectionChangedEventArgs<T>.Add(value, buffer.Count - 1));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void AddLastRange(T[] values)
|
||||||
|
{
|
||||||
|
lock (SyncRoot)
|
||||||
|
{
|
||||||
|
if (buffer.Count + values.Length -1 == fixedSize)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < values.Length; i++)
|
||||||
|
{
|
||||||
|
buffer.RemoveFirst(); // removes...
|
||||||
|
}
|
||||||
|
for (int i = 0; i < values.Length; i++)
|
||||||
|
{
|
||||||
|
buffer.AddLast(values[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Remove...
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user