iterators for Tableau and Foundation

This commit is contained in:
2026-06-10 20:39:05 -07:00
parent fb01881f62
commit b34373750b
+54
View File
@@ -164,6 +164,33 @@ impl Tableau {
})
}
}
pub struct TableauIter {
tableau: Option<Tableau>,
}
impl TableauIter {
pub const fn new() -> Self {
Self {
tableau: Some(Tableau::ITER_BEGIN),
}
}
}
impl Iterator for TableauIter {
type Item = Tableau;
fn next(&mut self) -> Option<Self::Item> {
let t = self.tableau?;
self.tableau = t.next();
Some(t)
}
}
impl IntoIterator for Tableau {
type Item = Self;
type IntoIter = TableauIter;
fn into_iter(self) -> Self::IntoIter {
TableauIter {
tableau: Some(self),
}
}
}
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
pub enum Foundation {
@@ -184,6 +211,33 @@ impl Foundation {
})
}
}
pub struct FoundationIter {
foundation: Option<Foundation>,
}
impl FoundationIter {
pub const fn new() -> Self {
Self {
foundation: Some(Foundation::ITER_BEGIN),
}
}
}
impl Iterator for FoundationIter {
type Item = Foundation;
fn next(&mut self) -> Option<Self::Item> {
let t = self.foundation?;
self.foundation = t.next();
Some(t)
}
}
impl IntoIterator for Foundation {
type Item = Self;
type IntoIter = FoundationIter;
fn into_iter(self) -> Self::IntoIter {
FoundationIter {
foundation: Some(self),
}
}
}
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
pub enum KlondikePile {