futures_intrusive::buffer

Trait RealArray

Source
pub unsafe trait RealArray<T> {
    const LEN: usize;
}
Expand description

A marker trait which may only be implemented for native array types, like [T; 2]. The library incorporates several components that are parameterized by array types, but currently Rust provides no safe mechanism to express that.

In order to work around the limitations, these methods only accept arrays which implement the RealArray type. The library provides an implementation of RealArray for arrays up to length 64, as well as for all powers of 2 up to 64k.

In order to let the library accept arrays of bigger sizes, RealArray can be implemented by users via newtypes. A type as defined in the following example can be passed to the library:

use futures_intrusive::buffer::RealArray;
use futures_intrusive::channel::LocalChannel;

struct I32x384Array([i32; 384]);
unsafe impl RealArray<i32> for I32x384Array {
    const LEN: usize = 384;
}

impl AsMut<[i32]> for I32x384Array {
    fn as_mut(&mut self) -> &mut [i32] {
        &mut self.0
    }
}

impl AsRef<[i32]> for I32x384Array {
    fn as_ref(&self) -> &[i32] {
        &self.0
    }
}

fn main() {
    let channel = LocalChannel::<i32, I32x384Array>::new();
}

Required Associated Constants§

Source

const LEN: usize

The length of the array

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

Source§

impl<T> RealArray<T> for [T; 0]

Source§

const LEN: usize = 0usize

Source§

impl<T> RealArray<T> for [T; 1]

Source§

const LEN: usize = 1usize

Source§

impl<T> RealArray<T> for [T; 2]

Source§

const LEN: usize = 2usize

Source§

impl<T> RealArray<T> for [T; 3]

Source§

const LEN: usize = 3usize

Source§

impl<T> RealArray<T> for [T; 4]

Source§

const LEN: usize = 4usize

Source§

impl<T> RealArray<T> for [T; 5]

Source§

const LEN: usize = 5usize

Source§

impl<T> RealArray<T> for [T; 6]

Source§

const LEN: usize = 6usize

Source§

impl<T> RealArray<T> for [T; 7]

Source§

const LEN: usize = 7usize

Source§

impl<T> RealArray<T> for [T; 8]

Source§

const LEN: usize = 8usize

Source§

impl<T> RealArray<T> for [T; 9]

Source§

const LEN: usize = 9usize

Source§

impl<T> RealArray<T> for [T; 10]

Source§

const LEN: usize = 10usize

Source§

impl<T> RealArray<T> for [T; 11]

Source§

const LEN: usize = 11usize

Source§

impl<T> RealArray<T> for [T; 12]

Source§

const LEN: usize = 12usize

Source§

impl<T> RealArray<T> for [T; 13]

Source§

const LEN: usize = 13usize

Source§

impl<T> RealArray<T> for [T; 14]

Source§

const LEN: usize = 14usize

Source§

impl<T> RealArray<T> for [T; 15]

Source§

const LEN: usize = 15usize

Source§

impl<T> RealArray<T> for [T; 16]

Source§

const LEN: usize = 16usize

Source§

impl<T> RealArray<T> for [T; 17]

Source§

const LEN: usize = 17usize

Source§

impl<T> RealArray<T> for [T; 18]

Source§

const LEN: usize = 18usize

Source§

impl<T> RealArray<T> for [T; 19]

Source§

const LEN: usize = 19usize

Source§

impl<T> RealArray<T> for [T; 20]

Source§

const LEN: usize = 20usize

Source§

impl<T> RealArray<T> for [T; 21]

Source§

const LEN: usize = 21usize

Source§

impl<T> RealArray<T> for [T; 22]

Source§

const LEN: usize = 22usize

Source§

impl<T> RealArray<T> for [T; 23]

Source§

const LEN: usize = 23usize

Source§

impl<T> RealArray<T> for [T; 24]

Source§

const LEN: usize = 24usize

Source§

impl<T> RealArray<T> for [T; 25]

Source§

const LEN: usize = 25usize

Source§

impl<T> RealArray<T> for [T; 26]

Source§

const LEN: usize = 26usize

Source§

impl<T> RealArray<T> for [T; 27]

Source§

const LEN: usize = 27usize

Source§

impl<T> RealArray<T> for [T; 28]

Source§

const LEN: usize = 28usize

Source§

impl<T> RealArray<T> for [T; 29]

Source§

const LEN: usize = 29usize

Source§

impl<T> RealArray<T> for [T; 30]

Source§

const LEN: usize = 30usize

Source§

impl<T> RealArray<T> for [T; 31]

Source§

const LEN: usize = 31usize

Source§

impl<T> RealArray<T> for [T; 32]

Source§

const LEN: usize = 32usize

Source§

impl<T> RealArray<T> for [T; 33]

Source§

const LEN: usize = 33usize

Source§

impl<T> RealArray<T> for [T; 34]

Source§

const LEN: usize = 34usize

Source§

impl<T> RealArray<T> for [T; 35]

Source§

const LEN: usize = 35usize

Source§

impl<T> RealArray<T> for [T; 36]

Source§

const LEN: usize = 36usize

Source§

impl<T> RealArray<T> for [T; 37]

Source§

const LEN: usize = 37usize

Source§

impl<T> RealArray<T> for [T; 38]

Source§

const LEN: usize = 38usize

Source§

impl<T> RealArray<T> for [T; 39]

Source§

const LEN: usize = 39usize

Source§

impl<T> RealArray<T> for [T; 40]

Source§

const LEN: usize = 40usize

Source§

impl<T> RealArray<T> for [T; 41]

Source§

const LEN: usize = 41usize

Source§

impl<T> RealArray<T> for [T; 42]

Source§

const LEN: usize = 42usize

Source§

impl<T> RealArray<T> for [T; 43]

Source§

const LEN: usize = 43usize

Source§

impl<T> RealArray<T> for [T; 44]

Source§

const LEN: usize = 44usize

Source§

impl<T> RealArray<T> for [T; 45]

Source§

const LEN: usize = 45usize

Source§

impl<T> RealArray<T> for [T; 46]

Source§

const LEN: usize = 46usize

Source§

impl<T> RealArray<T> for [T; 47]

Source§

const LEN: usize = 47usize

Source§

impl<T> RealArray<T> for [T; 48]

Source§

const LEN: usize = 48usize

Source§

impl<T> RealArray<T> for [T; 49]

Source§

const LEN: usize = 49usize

Source§

impl<T> RealArray<T> for [T; 50]

Source§

const LEN: usize = 50usize

Source§

impl<T> RealArray<T> for [T; 51]

Source§

const LEN: usize = 51usize

Source§

impl<T> RealArray<T> for [T; 52]

Source§

const LEN: usize = 52usize

Source§

impl<T> RealArray<T> for [T; 53]

Source§

const LEN: usize = 53usize

Source§

impl<T> RealArray<T> for [T; 54]

Source§

const LEN: usize = 54usize

Source§

impl<T> RealArray<T> for [T; 55]

Source§

const LEN: usize = 55usize

Source§

impl<T> RealArray<T> for [T; 56]

Source§

const LEN: usize = 56usize

Source§

impl<T> RealArray<T> for [T; 57]

Source§

const LEN: usize = 57usize

Source§

impl<T> RealArray<T> for [T; 58]

Source§

const LEN: usize = 58usize

Source§

impl<T> RealArray<T> for [T; 59]

Source§

const LEN: usize = 59usize

Source§

impl<T> RealArray<T> for [T; 60]

Source§

const LEN: usize = 60usize

Source§

impl<T> RealArray<T> for [T; 61]

Source§

const LEN: usize = 61usize

Source§

impl<T> RealArray<T> for [T; 62]

Source§

const LEN: usize = 62usize

Source§

impl<T> RealArray<T> for [T; 63]

Source§

const LEN: usize = 63usize

Source§

impl<T> RealArray<T> for [T; 64]

Source§

const LEN: usize = 64usize

Source§

impl<T> RealArray<T> for [T; 128]

Source§

const LEN: usize = 128usize

Source§

impl<T> RealArray<T> for [T; 256]

Source§

const LEN: usize = 256usize

Source§

impl<T> RealArray<T> for [T; 512]

Source§

const LEN: usize = 512usize

Source§

impl<T> RealArray<T> for [T; 1024]

Source§

const LEN: usize = 1_024usize

Source§

impl<T> RealArray<T> for [T; 2048]

Source§

const LEN: usize = 2_048usize

Source§

impl<T> RealArray<T> for [T; 4096]

Source§

const LEN: usize = 4_096usize

Source§

impl<T> RealArray<T> for [T; 8192]

Source§

const LEN: usize = 8_192usize

Source§

impl<T> RealArray<T> for [T; 16384]

Source§

const LEN: usize = 16_384usize

Source§

impl<T> RealArray<T> for [T; 32768]

Source§

const LEN: usize = 32_768usize

Source§

impl<T> RealArray<T> for [T; 65536]

Source§

const LEN: usize = 65_536usize

Implementors§