Multireferences for Rust
Allowing to pass from [&T] to (an analogue of) &[T] safely
without copying anything.
More precisely
This crate provides two helper types Slice and Pair
that allow the following conversions:
The inverse distributive law
&'a [&'x T] -> &'a Slice<T>(and a mutable equivalent)&'a (&'x A, &'x B) -> &'a Pair<A, B>(and a mutable equivalent)
The forward distributive law
&'a Slice<T> -> &'a [&'a T](and a mutable equivalent)&'a Pair<A, B> -> &'a (&'a A, &'a B)(and a mutable equivalent)
What for?
To move lifetimes from the depths of a type expression closer to its head.
Such a manipulation can be useful in a cps-heavy code.
Details
Usage
Simply include
multiref = "0.1"
in your Cargo.toml.
The crate doesn't use any of the std library and has
the #![no_std] attribute.
Similiar crates
There is a similiarly named crate
multi_mut.
It allows to extract multiple nonintersecting mutable references
from the std::collections maps.
However it has nothing to do with the distributive laws.
Versions
0.1.2: fixed a soundness issue with pairs0.1.1:modifymethods for pairs and “slices”.0.1.0: Initial version.