[][src]Trait permutator::Permutation

pub trait Permutation<'a> {
    type Permutator: Iterator;
    fn permutation(&'a mut self) -> Self::Permutator;
}

Create a permutation iterator that permute data in place. Built-in implementation return an object of HeapPermutation for slice/array and Vec. It return an object of HeapPermutationCellIter on data type of Rc<RefCell<&mut [T]>>.

Example

For typical permutation:

use permutator::Permutation;
let mut data = vec![1, 2, 3];
data.permutation().for_each(|p| {
    // call multiple times. It'll print [1, 2, 3], [2, 1, 3], [3, 1, 2], 
    // [1, 3, 2], [2, 3, 1], and [3, 2, 1] respectively.
    println!("{:?}", p);
});

For k-permutation:

use permutator::{Combination, Permutation};
let data = [1, 2, 3, 4, 5];
let k = 3;

data.combination(k).for_each(|mut combination| {
    // print the first combination
    combination.permutation().for_each(|permuted| {
        // print permutation of each combination
        println!("{:?}", permuted);
    });
});
// All k-permutation printed

See

Breaking change from 0.3.x to 0.4

Since version 0.4.0, the first result return by this iterator will be the original value

Associated Types

type Permutator: Iterator

A permutation generator for a collection of data.

See

Loading content...

Required methods

fn permutation(&'a mut self) -> Self::Permutator

Create a permutation based on Heap's algorithm. It return HeapPermutation object.

Loading content...

Implementations on Foreign Types

impl<'a, T> Permutation<'a> for [T] where
    T: 'a + Clone
[src]

Generate permutation on an array or slice of T It return mostly similar to HeapPermutation but it include an original value as first value return by Iterator.

Breaking change from 0.3.x to 0.4

Since version 0.4.0, the first result return by this iterator will be the original value

type Permutator = Chain<Once<Vec<T>>, HeapPermutationIterator<'a, T>>

Use HeapPermutation as permutation generator

impl<'a, T> Permutation<'a> for Vec<T> where
    T: 'a + Clone
[src]

Generate permutation on a Vec of T It return mostly similar to HeapPermutation but it include an original value as first value return by Iterator.

Breaking change from 0.3.x to 0.4

Since version 0.4.0, the first result return by this iterator will be the original value

type Permutator = Chain<Once<Vec<T>>, HeapPermutationIterator<'a, T>>

Use HeapPermutation as permutation generator

impl<'a, T> Permutation<'a> for Rc<RefCell<&'a mut [T]>> where
    T: 'a, 
[src]

Generate a sharable permutation inside Rc<RefCell<&mut [T]>> It return HeapPermutationCellIter but it include an original value as first value return by Iterator.

Breaking change from 0.3.x to 0.4

Since version 0.4.0, the first result return by this iterator will be the original value

type Permutator = Chain<Once<()>, HeapPermutationCellIter<'a, T>>

Use HeapPermutationCellIter as permutation generator

impl<'a, T> Permutation<'a> for *mut [T] where
    T: 'a + Clone
[src]

Generate permutation a mutable pointer to slice of T It return HeapPermutation but it include an original value as first value return by Iterator.

Warning

This implementation hid unsafe inside the permutation function but doesn't provide any additional safety. User need to treat the return object as unsafe.

Breaking change from 0.3.x to 0.4

Since version 0.4.0, the first result return by this iterator will be the original value

type Permutator = Chain<Once<()>, HeapPermutationRefIter<'a, T>>

Use HeapPermutation as permutation generator

Loading content...

Implementors

impl<'a, 'b: 'a, T> Permutation<'a> for KPermutationIntoCellParams<'b, T>[src]

type Permutator = KPermutationCellIter<'b, T>

impl<'a, 'b: 'a, T> Permutation<'a> for KPermutationIntoRefParams<'b, T>[src]

type Permutator = KPermutationRefIter<'b, T>

impl<'a, T> Permutation<'a> for KPermutationParams<'a, T>[src]

type Permutator = KPermutationIterator<'a, T>

Loading content...