sort method
Default comparison would deem null element as largest, i.e. null would be
at the end of this List. If you want to change this default
behaviour, must provide a new compare function.
Implementation
@override
void sort([int Function(E? a, E? b)? compare]) {
_checkUnmodifiable();
_compactElements();
final len = length; // purge GCed
if (len == 0 || _segList.isEmpty) return; // nothing to do
final compare0 = compare ?? _largeNullCompare;
final smallNull = _segList.isNotEmpty &&
compare0(null, _segList.first._elements.first.target) < 0;
final result = _Seg<E>(0);
for (final seg in _segList) {
result.mergeSeg(seg);
}
int compare1(WeakReference<E> a, WeakReference<E> b) =>
compare0(a.target, b.target);
result._elements.sort(compare1);
if (smallNull) {
result.start = len - result.length;
}
_segList = <_Seg<E>>[result];
for (final weakRef in result._elements) {
_finalizer.attach(weakRef, _Token());
}
}