steepen/
steepen_strict.rs1use crate::steepen_compat::SteepenCompat;
2use crate::Separator;
3use std::fmt::{Debug, Formatter};
4
5pub struct SteepenStrict<I: Iterator, B> {
15 inner: SteepenCompat<I, B, Separator<I::Item>>,
16}
17
18impl<I, B> SteepenStrict<I, B>
19where
20 I: Iterator,
21 I::Item: Ord,
22{
23 #[inline]
24 pub(crate) fn new(iterator: I) -> Self {
25 SteepenStrict {
26 inner: SteepenCompat::new(iterator, |a, b| a >= b),
27 }
28 }
29}
30
31impl<I, B> Iterator for SteepenStrict<I, B>
32where
33 I: Iterator,
34 B: FromIterator<I::Item>,
35{
36 type Item = B;
37
38 #[inline]
39 fn next(&mut self) -> Option<B> {
40 self.inner.next()
41 }
42}
43
44impl<I, B> Debug for SteepenStrict<I, B>
45where
46 I: Debug + Iterator,
47 I::Item: Debug,
48{
49 #[inline]
50 fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
51 f.debug_struct("SteepenStrict")
52 .field("inner", &self.inner)
53 .finish()
54 }
55}
56
57impl<I, B> Default for SteepenStrict<I, B>
58where
59 I: Iterator + Default,
60 I::Item: Ord,
61{
62 #[inline]
63 fn default() -> Self {
64 SteepenStrict::new(I::default())
65 }
66}