apint/
digit_seq.rs

1use digit::Digit;
2
3use std::slice;
4
5/// A sequence of digits.
6/// 
7/// This is a very efficient `DigitSeq` since its data is contiguous in memory.
8#[derive(Debug, Clone)]
9pub(crate) struct ContiguousDigitSeq<'a> {
10	digits: slice::Iter<'a, Digit>
11}
12
13impl<'a> From<&'a [Digit]> for ContiguousDigitSeq<'a> {
14	#[inline]
15	fn from(slice: &'a [Digit]) -> ContiguousDigitSeq<'a> {
16		ContiguousDigitSeq{digits: slice.iter()}
17	}
18}
19
20impl<'a> Iterator for ContiguousDigitSeq<'a> {
21	type Item = Digit;
22
23	#[inline]
24	fn next(&mut self) -> Option<Self::Item> {
25		self.digits.next().cloned()
26	}
27}
28
29/// A sequence of mutable digits.
30/// 
31/// This is a very efficient `DigitSeqMut` since its data is contiguous in memory.
32#[derive(Debug)]
33pub(crate) struct ContiguousDigitSeqMut<'a> {
34	digits: slice::IterMut<'a, Digit>
35}
36
37impl<'a> From<&'a mut [Digit]> for ContiguousDigitSeqMut<'a> {
38	#[inline]
39	fn from(slice: &'a mut [Digit]) -> ContiguousDigitSeqMut<'a> {
40		ContiguousDigitSeqMut{digits: slice.iter_mut()}
41	}
42}
43
44impl<'a> Iterator for ContiguousDigitSeqMut<'a> {
45	type Item = &'a mut Digit;
46
47	#[inline]
48	fn next(&mut self) -> Option<Self::Item> {
49		self.digits.next()
50	}
51}