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