Macro reed_solomon_erasure::convert_2D_slices [] [src]

macro_rules! convert_2D_slices {
    (
        $slice:ident =into_vec=> $dst_type:ty
    ) => { ... };
    (
        $slice:ident =to_vec=> $dst_type:ty
    ) => { ... };
    (
        $slice:ident =to_mut_vec=> $dst_type:ty
    ) => { ... };
    (
        $slice:ident =into=> $dst_type:ty, $with_capacity:path
    ) => { ... };
    (
        $slice:ident =to=> $dst_type:ty, $with_capacity:path
    ) => { ... };
    (
        $slice:ident =to_mut=> $dst_type:ty, $with_capacity:path
    ) => { ... };
}

Makes it easier to work with 2D slices, arrays, etc.

Examples

Byte arrays on stack to Vec<&[u8]>

let array : [[u8; 3]; 2] = [[1, 2, 3],
                            [4, 5, 6]];

let refs : Vec<&[u8]> =
    convert_2D_slices!(array =to_vec=> &[u8]);

Byte arrays on stack to Vec<&mut [u8]> (borrow mutably)

let mut array : [[u8; 3]; 2] = [[1, 2, 3],
                                [4, 5, 6]];

let refs : Vec<&mut [u8]> =
    convert_2D_slices!(array =to_mut_vec=> &mut [u8]);

Byte arrays on stack to SmallVec<[&mut [u8]; 32]> (borrow mutably)

let mut array : [[u8; 3]; 2] = [[1, 2, 3],
                                [4, 5, 6]];

let refs : SmallVec<[&mut [u8]; 32]> =
    convert_2D_slices!(array =to_mut=> SmallVec<[&mut [u8]; 32]>,
                       SmallVec::with_capacity);

Shard array to SmallVec<[&mut [u8]; 32]> (borrow mutably)

let mut shards = shards!([1, 2, 3],
                         [4, 5, 6]);

let refs : SmallVec<[&mut [u8]; 32]> =
    convert_2D_slices!(shards =to_mut=> SmallVec<[&mut [u8]; 32]>,
                       SmallVec::with_capacity);

Shard array to Vec<&mut [u8]> (borrow mutably) into SmallVec<[&mut [u8]; 32]> (move)

let mut shards = shards!([1, 2, 3],
                         [4, 5, 6]);

let refs1 = convert_2D_slices!(shards =to_mut_vec=> &mut [u8]);

let refs2 : SmallVec<[&mut [u8]; 32]> =
    convert_2D_slices!(refs1 =into=> SmallVec<[&mut [u8]; 32]>,
                       SmallVec::with_capacity);