Skip to content

Commit 40f2cc3

Browse files
committed
Add more overrides of is_done
1 parent 8298b32 commit 40f2cc3

File tree

1 file changed

+81
-10
lines changed

1 file changed

+81
-10
lines changed

src/lib.rs

Lines changed: 81 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,11 @@ pub trait StreamingIterator {
9494
(0, None)
9595
}
9696

97+
/// Checks if `get()` will return `None`.
98+
fn is_done(&self) -> bool {
99+
self.get().is_none()
100+
}
101+
97102
/// Determines if all elements of the iterator satisfy a predicate.
98103
#[inline]
99104
fn all<F>(&mut self, mut f: F) -> bool
@@ -409,11 +414,6 @@ pub trait StreamingIterator {
409414
Rev(self)
410415
}
411416

412-
/// Checks if `get()` will return `None`.
413-
fn is_done(&self) -> bool {
414-
self.get().is_none()
415-
}
416-
417417
/// Reduces the iterator's elements to a single, final value.
418418
#[inline]
419419
fn fold<B, F>(mut self, init: B, mut f: F) -> B
@@ -450,6 +450,11 @@ where
450450
(**self).advance()
451451
}
452452

453+
#[inline]
454+
fn is_done(&self) -> bool {
455+
(**self).is_done()
456+
}
457+
453458
#[inline]
454459
fn get(&self) -> Option<&Self::Item> {
455460
(**self).get()
@@ -478,6 +483,11 @@ where
478483
(**self).advance()
479484
}
480485

486+
#[inline]
487+
fn is_done(&self) -> bool {
488+
(**self).is_done()
489+
}
490+
481491
#[inline]
482492
fn get(&self) -> Option<&Self::Item> {
483493
(**self).get()
@@ -575,6 +585,16 @@ where
575585
}
576586
}
577587

588+
#[inline]
589+
fn is_done(&self) -> bool {
590+
use ChainState::*;
591+
592+
match self.state {
593+
BothForward | Front => self.a.is_done(),
594+
BothBackward | Back => self.b.is_done(),
595+
}
596+
}
597+
578598
#[inline]
579599
fn get(&self) -> Option<&Self::Item> {
580600
use ChainState::*;
@@ -712,6 +732,11 @@ where
712732
}
713733
}
714734

735+
#[inline]
736+
fn is_done(&self) -> bool {
737+
self.it.is_done()
738+
}
739+
715740
#[inline]
716741
fn get(&self) -> Option<&I::Item> {
717742
self.it.get()
@@ -898,6 +923,14 @@ where
898923
}
899924
}
900925

926+
#[inline]
927+
fn is_done(&self) -> bool {
928+
match self.sub_iter {
929+
Some(ref iter) => iter.is_done(),
930+
None => true,
931+
}
932+
}
933+
901934
#[inline]
902935
fn get(&self) -> Option<&Self::Item> {
903936
self.sub_iter.as_ref().and_then(J::get)
@@ -1014,6 +1047,14 @@ where
10141047
}
10151048
}
10161049

1050+
#[inline]
1051+
fn is_done(&self) -> bool {
1052+
match self.state {
1053+
FuseState::Start | FuseState::End => true,
1054+
FuseState::Middle => self.it.is_done(),
1055+
}
1056+
}
1057+
10171058
#[inline]
10181059
fn get(&self) -> Option<&I::Item> {
10191060
match self.state {
@@ -1091,6 +1132,11 @@ where
10911132
}
10921133
}
10931134

1135+
#[inline]
1136+
fn is_done(&self) -> bool {
1137+
self.it.is_done()
1138+
}
1139+
10941140
fn get(&self) -> Option<&Self::Item> {
10951141
self.it.get()
10961142
}
@@ -1265,6 +1311,11 @@ where
12651311
self.it.advance();
12661312
}
12671313

1314+
#[inline]
1315+
fn is_done(&self) -> bool {
1316+
self.it.is_done()
1317+
}
1318+
12681319
#[inline]
12691320
fn get(&self) -> Option<&B> {
12701321
self.it.get().map(&self.f)
@@ -1280,11 +1331,6 @@ where
12801331
self.it.next().map(&self.f)
12811332
}
12821333

1283-
#[inline]
1284-
fn is_done(&self) -> bool {
1285-
self.it.get().is_none()
1286-
}
1287-
12881334
#[inline]
12891335
fn fold<Acc, Fold>(self, init: Acc, mut fold: Fold) -> Acc
12901336
where
@@ -1363,6 +1409,11 @@ where
13631409
self.n = 0;
13641410
}
13651411

1412+
#[inline]
1413+
fn is_done(&self) -> bool {
1414+
self.it.is_done()
1415+
}
1416+
13661417
#[inline]
13671418
fn get(&self) -> Option<&I::Item> {
13681419
self.it.get()
@@ -1419,6 +1470,11 @@ where
14191470
}
14201471
}
14211472

1473+
#[inline]
1474+
fn is_done(&self) -> bool {
1475+
self.it.is_done()
1476+
}
1477+
14221478
#[inline]
14231479
fn get(&self) -> Option<&I::Item> {
14241480
self.it.get()
@@ -1470,6 +1526,11 @@ where
14701526
}
14711527
}
14721528

1529+
#[inline]
1530+
fn is_done(&self) -> bool {
1531+
self.done || self.it.is_done()
1532+
}
1533+
14731534
#[inline]
14741535
fn get(&self) -> Option<&I::Item> {
14751536
if self.done {
@@ -1513,6 +1574,11 @@ where
15131574
}
15141575
}
15151576

1577+
#[inline]
1578+
fn is_done(&self) -> bool {
1579+
self.done || self.it.is_done()
1580+
}
1581+
15161582
#[inline]
15171583
fn get(&self) -> Option<&I::Item> {
15181584
if self.done {
@@ -1566,6 +1632,11 @@ where
15661632
self.0.advance_back();
15671633
}
15681634

1635+
#[inline]
1636+
fn is_done(&self) -> bool {
1637+
self.0.is_done()
1638+
}
1639+
15691640
#[inline]
15701641
fn get(&self) -> Option<&I::Item> {
15711642
self.0.get()

0 commit comments

Comments
 (0)