combinations method

  1. @override
Iterable<OrphanHand> combinations([
  1. int? count
])
override

Implementation

@override
Iterable<OrphanHand> combinations([int? count]) sync* {
  count ??= _cards.length;
  if (count > _cards.length) return;

  if (0 == count || _cards.isEmpty) {
    yield OrphanHand();
    return;
  }
  List<Card> cs = _cards.toList();
  ojSort(cs);
  if (cs.length == count) {
    yield OrphanHand.fromIterable(cs);
    return;
  }

  List<int> a = List<int>.generate(count, (i) => i + 1);

  do {
    var res = OrphanHand();
    for (int i = 0; i < count; i += 1) {
      res.push(cs[a[i] - 1]);
    }
    yield res;
  } while (ojNextCombination(a, cs.length));
}