Implement more methods for custom iterators.
This commit is contained in:
parent
fe6691752b
commit
713f8ea672
@ -1,5 +1,6 @@
|
||||
use crate::dynamic::Variant;
|
||||
use crate::{def_package, EvalAltResult, INT};
|
||||
use std::iter::{ExactSizeIterator, FusedIterator};
|
||||
use std::ops::Range;
|
||||
#[cfg(feature = "no_std")]
|
||||
use std::prelude::v1::*;
|
||||
@ -127,6 +128,11 @@ where
|
||||
}
|
||||
}
|
||||
|
||||
impl<T> FusedIterator for StepRange<T> where
|
||||
T: Variant + Copy + PartialOrd + Add<Output = T> + Sub<Output = T>
|
||||
{
|
||||
}
|
||||
|
||||
// Bit-field iterator with step
|
||||
#[derive(Debug, Clone, Copy, Hash, Eq, PartialEq)]
|
||||
struct BitRange(INT, INT, usize);
|
||||
@ -190,6 +196,20 @@ impl Iterator for BitRange {
|
||||
Some(r)
|
||||
}
|
||||
}
|
||||
|
||||
#[inline(always)]
|
||||
fn size_hint(&self) -> (usize, Option<usize>) {
|
||||
(self.2, Some(self.2))
|
||||
}
|
||||
}
|
||||
|
||||
impl FusedIterator for BitRange {}
|
||||
|
||||
impl ExactSizeIterator for BitRange {
|
||||
#[inline(always)]
|
||||
fn len(&self) -> usize {
|
||||
self.2
|
||||
}
|
||||
}
|
||||
|
||||
// String iterator over characters
|
||||
@ -248,6 +268,21 @@ impl Iterator for CharsStream {
|
||||
Some(ch)
|
||||
}
|
||||
}
|
||||
|
||||
#[inline(always)]
|
||||
fn size_hint(&self) -> (usize, Option<usize>) {
|
||||
let remaining = self.0.len() - self.1;
|
||||
(remaining, Some(remaining))
|
||||
}
|
||||
}
|
||||
|
||||
impl FusedIterator for CharsStream {}
|
||||
|
||||
impl ExactSizeIterator for CharsStream {
|
||||
#[inline(always)]
|
||||
fn len(&self) -> usize {
|
||||
self.0.len() - self.1
|
||||
}
|
||||
}
|
||||
|
||||
macro_rules! reg_range {
|
||||
@ -356,7 +391,7 @@ def_package!(crate:BasicIteratorPackage:"Basic range iterators.", lib, {
|
||||
}
|
||||
}
|
||||
|
||||
impl std::iter::FusedIterator for StepFloatRange {}
|
||||
impl FusedIterator for StepFloatRange {}
|
||||
|
||||
lib.set_iterator::<StepFloatRange>();
|
||||
|
||||
@ -418,7 +453,7 @@ def_package!(crate:BasicIteratorPackage:"Basic range iterators.", lib, {
|
||||
}
|
||||
}
|
||||
|
||||
impl std::iter::FusedIterator for StepDecimalRange {}
|
||||
impl FusedIterator for StepDecimalRange {}
|
||||
|
||||
lib.set_iterator::<StepDecimalRange>();
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user