diff --git a/klondike/src/lib.rs b/klondike/src/lib.rs index 425201f..0615a1e 100644 --- a/klondike/src/lib.rs +++ b/klondike/src/lib.rs @@ -164,6 +164,33 @@ impl Tableau { }) } } +pub struct TableauIter { + tableau: Option, +} +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 { + 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, +} +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 { + 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 {