fn from(_: TryFromIntError) -> Overflow { Overflow }
}
-trait AddSubOffset {
+pub trait AddSubOffset {
fn init_delta(&self) -> LimbVal;
const CARRY_DELTA : LimbVal;
const NEW_LIMBS : LimbVal;
}
}
-pub type RangeIterator = std::iter::Take<RangeIteratorCore>;
+pub type RangeIterator = std::iter::Take<IteratorCore<AddSubRangeDelta>>;
-pub struct RangeIteratorCore {
+pub struct IteratorCore<ASO> {
current: Mutable,
- aso: AddSubRangeDelta,
+ aso: ASO,
}
-struct AddSubRangeDelta {
+pub struct AddSubRangeDelta {
i: usize,
step: LimbVal,
}
}
#[throws(RangeBackwards)]
- fn range_core(a: &Mutable, b: &Mutable, count: u32) -> RangeIteratorCore {
+ fn range_core(a: &Mutable, b: &Mutable, count: u32)
+ -> IteratorCore<AddSubRangeDelta> {
type ASRD = AddSubRangeDelta;
let count = count as RawLimbVal;
let mut current = a.clone();
current.limbs[i] = init;
break 'ok ASRD { i, step: Wrapping(step) };
} };
- RangeIteratorCore { current, aso }
+ IteratorCore { current, aso }
}
#[throws(RangeBackwards)]
}
}
-impl Iterator for RangeIteratorCore {
+impl<ASO:AddSubOffset> Iterator for IteratorCore<ASO> {
type Item = ZCoord;
#[throws(as Option)]
fn next(&mut self) -> ZCoord {
self.current.repack().unwrap()
}
}
-impl ExactSizeIterator for RangeIteratorCore {
+impl ExactSizeIterator for IteratorCore<AddSubRangeDelta> {
fn len(&self) -> usize { return usize::MAX }
}