sortedInsertTrade function

dynamic sortedInsertTrade(
  1. List<Trade> items,
  2. Trade add,
  3. int maxSize
)

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;
  }
}