3 个版本

0.1.2 2018年9月28日
0.1.1 2018年9月14日
0.1.0 2018年9月14日

Rust 模式 中排名第 2761

MIT 许可证

19KB
395

定位

此 crate 提供了 IntoPin 特性。 IntoPin 可以用来将任何类型包装在 Pin 中,但在创建强制、固定的引用方面非常强大。

示例

#![feature(pin)]

extern crate pinpoint;

use std::pin::Pin;
use pinpoint::IntoPin;

fn example<'a, P>(item: P)
where
    P: IntoPin<&'a mut [u8]>
{
    let mut pin: Pin<&mut [u8]> = item.into_pin();
    pin.reverse();
}

let mut v = vec![1, 2, 3, 4];
example(&mut v);
assert_eq!(v, [4, 3, 2, 1]);

let mut b: Box<[u8]> = Box::new([4, 3, 2, 1]);
example(&mut b);
assert_eq!(*b, [1, 2, 3, 4]);

lib.rs:

此 crate 提供了 IntoPin 特性。 IntoPin 可以用来将任何类型包装在 Pin 中,但在创建强制、固定的引用方面非常强大。

示例

#![feature(pin)]

extern crate pinpoint;
use std::pin::Pin;
use pinpoint::IntoPin;

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

let pinned_slice: Pin<&[u32]> = (&v).into_pin();

使用泛型的示例

#![feature(pin)]

extern crate pinpoint;
use std::pin::Pin;
use pinpoint::IntoPin;

fn example<'a, P>(item: P)
where
    P: IntoPin<&'a mut [u8]>
{
    let mut pin = item.into_pin();

    pin.reverse();
}

let mut v = vec![1, 2, 3, 4];
example(&mut v);
assert_eq!(v, [4, 3, 2, 1]);

let mut b: Box<[u8]> = Box::new([4, 3, 2, 1]);
example(&mut b);
assert_eq!(*b, [1, 2, 3, 4]);

特性

为了使用 IntoPin 特性,应使用此 crate 的特性 pinned。为了从一个包含切片的 Cell 创建包含 Cell 类型的固定切片,请使用此 crate 的 slice_of_cells 特性。

无运行时依赖

特性