sortedInsertTrade function
Implementation
sortedInsertTrade(List<Trade> items, Trade add, int maxSize) {
invariant(maxSize > 0, 'MAX_SIZE_ZERO');
// this is an invariant because the interface cannot return multiple removed items if items.length exceeds maxSize
// invariant(items.length <= maxSize, 'ITEMS_SIZE');
// short circuit first item add
if (items.isEmpty) {
items.add(add);
return null;
} else {
final isFull = items.length == maxSize;
// short circuit if full and the additional item does not come before the last item
if (isFull && (tradeComparator(items[items.length - 1], add) <= 0)) {
return add;
}
int lo = 0;
int hi = items.length;
while (lo < hi) {
final mid = (lo + hi) >>> 1;
if (tradeComparator(items[mid], add) <= 0) {
lo = mid + 1;
} else {
hi = mid;
}
}
items = splice(items, lo, 0, add);
if (isFull) {
return items.last;
}
return null;
}
}