CardSetInventory constructor
Creates a new CardSetInventory for the given cards in belongsTo.
If belongsTo is not specified, the first card's Card.cardSet is used.
While cards does not need to be all the cards in cardSet (i.e. due
to partial releases), every card in cards must belong to cardSet or an
error will be thrown.
Implementation
factory CardSetInventory(Set<Card> cards, {CardSet? belongsTo}) {
if (belongsTo == null) {
if (cards.isEmpty) {
throw ArgumentError.value(
'<empty set>',
'cards',
'Must specify belongsTo if cards is empty',
);
}
belongsTo = cards.first.cardSet;
}
// Create an indexed lookup table for the cards in the set.
final lookupCards = List<Card?>.filled(belongsTo.totalCards, null);
final lookupTokens = List<TokenCard?>.filled(belongsTo.totalCards, null);
for (final card in cards) {
if (card.cardSet != belongsTo) {
throw ArgumentError.value(
card,
'cards',
'Card does not belong to $belongsTo',
);
}
if (card is TokenCard) {
lookupTokens[card.orderInSet - 1] = card;
} else {
lookupCards[card.orderInSet - 1] = card;
}
}
return CardSetInventory._(
cards,
belongsTo,
lookupCards,
lookupTokens,
);
}