Sha256: adaf93c18c860b1d75a0d0b393df223ad44332627fa4064f7ea83ace8af06cc0

Contents?: true

Size: 1.62 KB

Versions: 19

Compression:

Stored size: 1.62 KB

Contents

mod multi_constructor;

pub(crate) type ConstructorVec<T> = Vec<T>;

struct Context;

struct It {
    i: u32,
    limit: u32,
}

impl multi_constructor::ContextIter for It {
    type Context = Context;
    type Output = u32;
    fn next(&mut self, _ctx: &mut Self::Context) -> Option<u32> {
        if self.i >= self.limit {
            None
        } else {
            let i = self.i;
            self.i += 1;
            Some(i)
        }
    }
}

impl multi_constructor::Context for Context {
    type etor_C_iter = It;
    fn etor_C(&mut self, value: u32) -> It {
        It { i: 0, limit: value }
    }

    type ctor_B_iter = multi_constructor::ContextIterWrapper<u32, std::vec::IntoIter<u32>, Context>;
    fn ctor_B(&mut self, value: u32) -> Self::ctor_B_iter {
        (0..value).rev().collect::<Vec<_>>().into_iter().into()
    }
}

struct IterWithContext<
    'a,
    Item,
    I: multi_constructor::ContextIter<Output = Item, Context = Context>,
> {
    ctx: &'a mut Context,
    it: I,
}

impl<'a, Item, I: multi_constructor::ContextIter<Output = Item, Context = Context>> Iterator
    for IterWithContext<'a, Item, I>
{
    type Item = Item;
    fn next(&mut self) -> Option<Self::Item> {
        self.it.next(self.ctx)
    }
}

fn main() {
    let mut ctx = Context;
    let l1 = multi_constructor::constructor_A(&mut ctx, 10);
    let l2 = multi_constructor::constructor_D(&mut ctx, 5);
    let l1 = IterWithContext {
        ctx: &mut ctx,
        it: l1,
    }
    .collect::<Vec<_>>();
    let l2 = IterWithContext {
        ctx: &mut ctx,
        it: l2,
    }
    .collect::<Vec<_>>();
    println!("l1 = {:?} l2 = {:?}", l1, l2);
}

Version data entries

19 entries across 19 versions & 1 rubygems

Version Path
wasmtime-15.0.1 ./ext/cargo-vendor/cranelift-isle-0.102.1/isle_examples/link/multi_constructor_main.rs
wasmtime-15.0.0 ./ext/cargo-vendor/cranelift-isle-0.102.1/isle_examples/link/multi_constructor_main.rs
wasmtime-14.0.4 ./ext/cargo-vendor/cranelift-isle-0.101.4/isle_examples/link/multi_constructor_main.rs
wasmtime-14.0.3 ./ext/cargo-vendor/cranelift-isle-0.101.4/isle_examples/link/multi_constructor_main.rs
wasmtime-14.0.1 ./ext/cargo-vendor/cranelift-isle-0.101.1/isle_examples/link/multi_constructor_main.rs
wasmtime-14.0.0 ./ext/cargo-vendor/cranelift-isle-0.101.1/isle_examples/link/multi_constructor_main.rs
wasmtime-13.0.0 ./ext/cargo-vendor/cranelift-isle-0.100.0/isle_examples/link/multi_constructor_main.rs
wasmtime-12.0.1 ./ext/cargo-vendor/cranelift-isle-0.99.1/isle_examples/link/multi_constructor_main.rs
wasmtime-12.0.0 ./ext/cargo-vendor/cranelift-isle-0.99.1/isle_examples/link/multi_constructor_main.rs
wasmtime-11.0.0 ./ext/cargo-vendor/cranelift-isle-0.98.1/isle_examples/link/multi_constructor_main.rs
wasmtime-10.0.1 ./ext/cargo-vendor/cranelift-isle-0.97.1/isle_examples/link/multi_constructor_main.rs
wasmtime-10.0.0 ./ext/cargo-vendor/cranelift-isle-0.97.1/isle_examples/link/multi_constructor_main.rs
wasmtime-9.0.4 ./ext/cargo-vendor/cranelift-isle-0.96.4/isle_examples/link/multi_constructor_main.rs
wasmtime-9.0.1 ./ext/cargo-vendor/cranelift-isle-0.96.1/isle_examples/link/multi_constructor_main.rs
wasmtime-8.0.0 ./ext/cargo-vendor/cranelift-isle-0.95.0/isle_examples/link/multi_constructor_main.rs
wasmtime-7.0.0 ./ext/cargo-vendor/cranelift-isle-0.94.0/isle_examples/link/multi_constructor_main.rs
wasmtime-6.0.1 ./ext/cargo-vendor/cranelift-isle-0.93.1/isle_examples/link/multi_constructor_main.rs
wasmtime-6.0.0 ./ext/cargo-vendor/cranelift-isle-0.93.0/isle_examples/link/multi_constructor_main.rs
wasmtime-5.0.0 ./ext/cargo-vendor/cranelift-isle-0.92.0/isle_examples/link/multi_constructor_main.rs