Browse Source
Merge pull request #3475 from MarchingCube/avalonialist-ensurecapacity
AvaloniaList: Allow for preallocating during `InsertRange` for more cases.
pull/3488/head
Steven Kirk
7 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with
20 additions and
0 deletions
-
src/Avalonia.Base/Collections/AvaloniaList.cs
|
|
|
@ -327,6 +327,8 @@ namespace Avalonia.Collections |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
EnsureCapacity(_inner.Count + list.Count); |
|
|
|
|
|
|
|
using (IEnumerator<T> en = items.GetEnumerator()) |
|
|
|
{ |
|
|
|
int insertIndex = index; |
|
|
|
@ -550,6 +552,24 @@ namespace Avalonia.Collections |
|
|
|
/// <inheritdoc/>
|
|
|
|
Delegate[] INotifyCollectionChangedDebug.GetCollectionChangedSubscribers() => _collectionChanged?.GetInvocationList(); |
|
|
|
|
|
|
|
private void EnsureCapacity(int capacity) |
|
|
|
{ |
|
|
|
// Adapted from List<T> implementation.
|
|
|
|
var currentCapacity = _inner.Capacity; |
|
|
|
|
|
|
|
if (currentCapacity < capacity) |
|
|
|
{ |
|
|
|
var newCapacity = currentCapacity == 0 ? 4 : currentCapacity * 2; |
|
|
|
|
|
|
|
if (newCapacity < capacity) |
|
|
|
{ |
|
|
|
newCapacity = capacity; |
|
|
|
} |
|
|
|
|
|
|
|
_inner.Capacity = newCapacity; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Raises the <see cref="CollectionChanged"/> event with an add action.
|
|
|
|
/// </summary>
|
|
|
|
|