diff --git a/combinatoric-solver/src/collection.rs b/combinatoric-solver/src/collection.rs index a7c1dd9303322c8545e2403fdfa2c626e3acafc4..d21d0f6caeb47662eff77a87f23e21cc080d7ec6 100644 --- a/combinatoric-solver/src/collection.rs +++ b/combinatoric-solver/src/collection.rs @@ -7,39 +7,39 @@ where V: ItemVariant, { pub score: S, - pub item_quantity: usize, pub item_variant: [V; MAX_ITEMS], } impl<const MAX_ITEMS: usize, S: Score, V: ItemVariant> Collection<MAX_ITEMS, S, V> { - pub fn push(&self, item_variant: V) -> Self { + #[inline] + pub fn push(&self, iteration: usize, item_variant: V) -> Self { let mut new = self.clone(); - new.item_variant[self.item_quantity] = item_variant; - new.item_quantity += 1; + new.item_variant[iteration] = item_variant; new } } impl<const MAX_ITEMS: usize, S: Score, V: ItemVariant> Default for Collection<MAX_ITEMS, S, V> { + #[inline] fn default() -> Self { let score = S::default(); - let item_quantity = 0; let item_variant = [V::default(); MAX_ITEMS]; Self { score, - item_quantity, item_variant, } } } impl<const MAX_ITEMS: usize, S: Score, V: ItemVariant> PartialEq for Collection<MAX_ITEMS, S, V> { + #[inline] fn eq(&self, other: &Self) -> bool { self.item_variant == other.item_variant } } impl<const MAX_ITEMS: usize, S: Score, V: ItemVariant> PartialOrd for Collection<MAX_ITEMS, S, V> { + #[inline] fn partial_cmp(&self, other: &Self) -> Option<std::cmp::Ordering> { self.score.partial_cmp(&other.score) } @@ -48,6 +48,7 @@ impl<const MAX_ITEMS: usize, S: Score, V: ItemVariant> PartialOrd for Collection impl<const MAX_ITEMS: usize, S: Score, V: ItemVariant> Eq for Collection<MAX_ITEMS, S, V> {} impl<const MAX_ITEMS: usize, S: Score, V: ItemVariant> Ord for Collection<MAX_ITEMS, S, V> { + #[inline] fn cmp(&self, other: &Self) -> std::cmp::Ordering { self.score.cmp(&other.score) } diff --git a/combinatoric-solver/src/solver.rs b/combinatoric-solver/src/solver.rs index 863a28795b985889b69b3673a064f841f4b723c6..eb27c4730e8e9eac385bf8045d45c0e47760f057 100644 --- a/combinatoric-solver/src/solver.rs +++ b/combinatoric-solver/src/solver.rs @@ -49,7 +49,7 @@ where } for variant in items[i].variants() { - let collections = collection.push(variant); + let collections = collection.push(i, variant); Self::rec_iter(i + 1, collections, items, top_items); } }