Crate rusty_perm[−][src]
Rusty permutation that supports no-std
and compile-time checked size.
Cargo features
To import this crate to your project,
[dependencies]
rusty-perm = "0.2"
It has the following cargo features.
- std (default): enable the standard library.
- rand (default): enable random sampling of permutation.
To restrict the crate to no_std
, you can disable the default features.
[dependencies]
rusty-perm = { version = "0.2", default-features = false }
Import this crate
To import members from this crate,
use rusty_perm::{prelude::*, PermD, PermS};
Both PermD
and PermS
represent permutations, except that
PermS
has an embedded compile-time size in type signature. The static size
prevents from applying permutation on arrays of wrong sizes in compile-time, and saves
some runtime overheads.
Identity
The identity permutation can be constructed with static or dynamic size.
use rusty_perm::{PermD, PermS}; let perm1 = PermS::<10>::identity(); let perm2 = PermD::identity(10);
Build by sorting slices and arrays
It can extracts the permutation by sorting an array.
use rusty_perm::{prelude::*, PermS}; // `perm` is an operator that maps [9, 6, -1, 4] to [-1, 4, 6, 9]. let perm = PermS::from_sort(&[9, 6, -1, 4]); // Apply same permutation on another array let mut array = [1, 2, 3, 4]; perm.apply(&mut array); assert_eq!(array, [3, 4, 2, 1]);
You can sort with custom comparing or key function by from_sort_by, from_sort_by_key and from_sort_by_cached_key.
use rusty_perm::{prelude::*, PermS}; // `perm` is an operator that maps [9, 6, -1, 4] to [9, 6, 4, -1]. let perm = PermS::from_sort_by_key(&[9, 6, -1, 4], |val| -val); // Apply same permutation on another array let mut array = [1, 2, 3, 4]; perm.apply(&mut array); assert_eq!(array, [1, 2, 4, 3]);
Build by indices
The permutation can be constructed by demonstrating the sorted indices.
use rusty_perm::{prelude::*, PermD}; let perm = PermD::from_indices([2, 0, 1]).unwrap(); let mut array = [-9, -5, 3]; perm.apply(&mut array); assert_eq!(array, [3, -9, -5]);
Inverse and composition
The example demonstrates the inverse and composition of permutations.
use rusty_perm::{prelude::*, PermD, PermS}; // Construct the permutation, its inverse and compose them let perm = PermS::from_indices([2, 0, 1]).unwrap(); let inverse = perm.inverse(); let composition = &inverse * &perm; // Check that composition with its inverse is identity assert_eq!(PermD::identity(3), composition);
Modules
prelude | Re-export of common traits. |
size | Permutation size markers. |
Structs
Perm | Generic permutation data structure. |
Traits
PermApply | The permutation operator on slice-like types. |
PermFromIndices | An operator that builds a permutation from a list indexes. |
PermFromSorting | An operator that builds a permutation type by sorting slice-like types. |
PermProduct | The permutation composition operator. |
Permutation | An abstract representation of permutation data structure. |
Type Definitions
Perm0 | Permutation type with static size 0. |
Perm1 | Permutation type with static size 1. |
Perm2 | Permutation type with static size 2. |
Perm4 | Permutation type with static size 4. |
Perm5 | Permutation type with static size 5. |
Perm6 | Permutation type with static size 6. |
Perm7 | Permutation type with static size 7. |
Perm8 | Permutation type with static size 8. |
Perm9 | Permutation type with static size 9. |
Perm10 | Permutation type with static size 10. |
Perm11 | Permutation type with static size 11. |
Perm12 | Permutation type with static size 12. |
Perm13 | Permutation type with static size 13. |
Perm14 | Permutation type with static size 14. |
Perm15 | Permutation type with static size 15. |
Perm16 | Permutation type with static size 16. |
Perm17 | Permutation type with static size 17. |
Perm18 | Permutation type with static size 18. |
Perm19 | Permutation type with static size 19. |
Perm20 | Permutation type with static size 20. |
Perm21 | Permutation type with static size 21. |
Perm22 | Permutation type with static size 22. |
Perm23 | Permutation type with static size 23. |
Perm24 | Permutation type with static size 24. |
Perm25 | Permutation type with static size 25. |
Perm26 | Permutation type with static size 26. |
Perm27 | Permutation type with static size 27. |
Perm28 | Permutation type with static size 28. |
Perm29 | Permutation type with static size 29. |
Perm30 | Permutation type with static size 30. |
Perm31 | Permutation type with static size 31. |
Perm32 | Permutation type with static size 32. |
PermD | Permutation type with runtime size. |
PermS | Permutation type with static size known in compile time. |