#iterator #slice #vector

slicetools

Add extra iterators to slices

4 releases (2 breaking)

Uses old Rust 2015

0.3.0 Mar 11, 2018
0.2.0 Mar 9, 2018
0.1.1 Mar 7, 2018
0.1.0 Mar 7, 2018

#2521 in Algorithms

Apache-2.0

19KB
358 lines

This crate aims to provide various tools for slices.

This crate use its own streaming iterator due to the lack of generic associated type in the language: you therefore cannot use those iterators with the for control flow. Use the while let control flow, or the macro helper, as you can see below.

Example

Cargo.toml:

[dependencies]
slicetools = "0.2.*"

main.rs:

extern crate slicetools;

use slicetools::*;

let mut v = vec![1, 2, 3, 4];
{
    let mut it = v.pairs_mut();
    
    while let Some((a, b)) = it.next() {
        if *b > *a {
            *a += 1;
        }
    }
}
assert_eq!(v, &[4, 4, 4, 4]);

Or, with the helper macro:

#[macro_use] extern crate slicetools;

use slicetools::*;

let mut v = vec![1, 2, 3, 4];

stream!( v.pairs_mut() => (a, b) in {
    if *b > *a {
        *a += 1;
    }
});
assert_eq!(v, &[4, 4, 4, 4]);

Changelog

0.3.*

  • Add 3 new extensions to take groups of items.

0.2.*

  • Use own streaming iterator instead of regular iterator that was unsafe (allowed multiple mutable borrowing on the same item).

  • Add a new streamer for doing a cartesian product between two slices.

No runtime deps