Module gmt_dos_clients::leftright

source ·
Expand description

§A client that splits vectors in 2 parts

LeftRight is a client that splits a vector in 2 parts: data = [left,right]

§Examples

Splitting the vector vec![1,2,3,4,5] into vec![1,2] and vec![3,4,5] and reassembling it

use gmt_dos_clients::leftright::{self, LeftRight, Split, Merge, Left, Right};
use interface::{UniqueIdentifier, Data, Read, Write};

enum S {}
impl UniqueIdentifier for S {
    type DataType = Vec<usize>;
}
enum M {}
impl UniqueIdentifier for M {
    type DataType = Vec<usize>;
}
let data: Vec<_> = (1..=5).into_iter().collect();
let (mut split, mut merge) = leftright::split_merge_at::<S, M>(2);

// SPLITTING
<LeftRight<S, Split, M> as Read<S>>::read(&mut split, data.clone().into());
let left = <LeftRight<S, Split, M> as Write<Left<S>>>::write(&mut split).unwrap();
assert_eq!(*left,vec![1,2]);
let right = <LeftRight<S, Split, M> as Write<Right<S>>>::write(&mut split).unwrap();
assert_eq!(*right,vec![3,4,5]);

// MERGING
<LeftRight<S, Merge, M> as Read<Left<S>>>::read(&mut merge, left);
<LeftRight<S, Merge, M> as Read<Right<S>>>::read(&mut merge, right);
let merged_data = <LeftRight<S, Merge, M> as Write<M>>::write(&mut merge).unwrap();
assert_eq!(*merged_data,data);

Splitting the vector vec![1,2,3,1,2,3,1,2,3,1,2,3] into vec![1,1,1,1] and vec![2,3,2,3,2,3,2,3] and reassembling it

use gmt_dos_clients::leftright::{self, LeftRight, Split, Merge, Left, Right};
use interface::{UniqueIdentifier, Data, Read, Write};

enum S {}
impl UniqueIdentifier for S {
    type DataType = Vec<usize>;
}
enum M {}
impl UniqueIdentifier for M {
    type DataType = Vec<usize>;
}
let data: Vec<_> = (1..=3).into_iter().collect::<Vec<_>>().repeat(4);
let (mut split, mut merge) = leftright::split_merge_chunks_at::<S, M>(3, 1);

// SPLITTING
<LeftRight<S, Split, M> as Read<S>>::read(&mut split, data.clone().into());
let left = <LeftRight<S, Split, M> as Write<Left<S>>>::write(&mut split).unwrap();
assert_eq!(*left,vec![1,1,1,1]);
let right = <LeftRight<S, Split, M> as Write<Right<S>>>::write(&mut split).unwrap();
assert_eq!(*right,vec![2,3,2,3,2,3,2,3]);

// MERGING
<LeftRight<S, Merge, M> as Read<Left<S>>>::read(&mut merge, left);
<LeftRight<S, Merge, M> as Read<Right<S>>>::read(&mut merge, right);
let merged_data = <LeftRight<S, Merge, M> as Write<M>>::write(&mut merge).unwrap();
assert_eq!(*merged_data,data);

Structs§

  • Identifier for the left part of the splitted data
  • LeftRight client
  • Identifier for the right part of the splitted data

Enums§

Functions§