getGrouping method

Grouping<TKey, TValue> getGrouping (
  1. TKey key,
  2. bool shouldCreate
)

Implementation

Grouping<TKey, TValue> getGrouping(TKey key, bool shouldCreate) {
  var hash = _internalGetHash(key);
  for (var g = groupings[hash % groupings.length];
      g != null;
      g = g.hashNext) {
    if (g.hashCode == hash && comparer.compare(g.key, key)) return g;
  }

  if (shouldCreate) {
    if (_count == groupings.length) resizeBuffer();
    final index = hash % groupings.length;
    final g = Grouping<TKey, TValue>();
    g.key = key;
    g.hash = hash;
    g.elements = [];
    g.hashNext = groupings[index];
    groupings[index] = g;
    if (lastGrouping == null) {
      g.next = g;
    } else {
      g.next = lastGrouping.next;
      lastGrouping.next = g;
    }
    lastGrouping = g;
    _count++;
    return g;
  }

  return null;
}