libcore: Add iter::from_generator
which is like iter::from_fn
, but for coroutines instead of functions
This commit is contained in:
parent
490324f7b2
commit
5bf23f64cc
9 changed files with 67 additions and 34 deletions
|
@ -13,8 +13,6 @@
|
|||
#![feature(control_flow_enum)]
|
||||
#![feature(core_intrinsics)]
|
||||
#![feature(extend_one)]
|
||||
#![feature(generator_trait)]
|
||||
#![feature(generators)]
|
||||
#![feature(let_else)]
|
||||
#![feature(hash_raw_entry)]
|
||||
#![feature(hasher_prefixfree_extras)]
|
||||
|
@ -114,9 +112,6 @@ pub mod unhash;
|
|||
pub use ena::undo_log;
|
||||
pub use ena::unify;
|
||||
|
||||
use std::ops::{Generator, GeneratorState};
|
||||
use std::pin::Pin;
|
||||
|
||||
pub struct OnDrop<F: Fn()>(pub F);
|
||||
|
||||
impl<F: Fn()> OnDrop<F> {
|
||||
|
@ -135,26 +130,6 @@ impl<F: Fn()> Drop for OnDrop<F> {
|
|||
}
|
||||
}
|
||||
|
||||
struct IterFromGenerator<G>(G);
|
||||
|
||||
impl<G: Generator<Return = ()> + Unpin> Iterator for IterFromGenerator<G> {
|
||||
type Item = G::Yield;
|
||||
|
||||
fn next(&mut self) -> Option<Self::Item> {
|
||||
match Pin::new(&mut self.0).resume(()) {
|
||||
GeneratorState::Yielded(n) => Some(n),
|
||||
GeneratorState::Complete(_) => None,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// An adapter for turning a generator closure into an iterator, similar to `iter::from_fn`.
|
||||
pub fn iter_from_generator<G: Generator<Return = ()> + Unpin>(
|
||||
generator: G,
|
||||
) -> impl Iterator<Item = G::Yield> {
|
||||
IterFromGenerator(generator)
|
||||
}
|
||||
|
||||
// See comments in src/librustc_middle/lib.rs
|
||||
#[doc(hidden)]
|
||||
pub fn __noop_fix_for_27438() {}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue