iterators for Tableau and Foundation
This commit is contained in:
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user