LL| |//@ compile-flags: -Zinline-mir LL| | LL| |use std::fmt::Display; LL| | LL| 1|fn main() { LL| 1| permutations(&['a', 'b', 'c']); LL| 1|} LL| | LL| |#[inline(always)] LL| 1|fn permutations(xs: &[T]) { LL| 1| let mut ys = xs.to_owned(); LL| 1| permutate(&mut ys, 0); LL| 1|} LL| | LL| 16|fn permutate(xs: &mut [T], k: usize) { LL| 16| let n = length(xs); LL| 16| if k == n { LL| 6| display(xs); LL| 10| } else if k < n { LL| 15| for i in k..n { ^10 LL| 15| swap(xs, i, k); LL| 15| permutate(xs, k + 1); LL| 15| swap(xs, i, k); LL| 15| } LL| 0| } else { LL| 0| error(); LL| 0| } LL| 16|} LL| | LL| 16|fn length(xs: &[T]) -> usize { LL| 16| xs.len() LL| 16|} LL| | LL| |#[inline] LL| 30|fn swap(xs: &mut [T], i: usize, j: usize) { LL| 30| let t = xs[i]; LL| 30| xs[i] = xs[j]; LL| 30| xs[j] = t; LL| 30|} LL| | LL| 6|fn display(xs: &[T]) { LL| 24| for x in xs { ^18 LL| 18| print!("{}", x); LL| 18| } LL| 6| println!(); LL| 6|} LL| | LL| |#[inline(always)] LL| 0|fn error() { LL| 0| panic!("error"); LL| |}