xiangyun 0.2.7

Xiangyun is the crate for random with Rust
Documentation
use super::num::Rand;

pub trait Chaos {
    fn chaos(&mut self);
}

impl<T> Chaos for Vec<T> 
where T: Copy + Clone {
    fn chaos(&mut self) {
        let mut result: Vec<T> = Vec::new();
        let mut order: Vec<usize> = Vec::new();
        for i in 0..self.len() {
            order.push(i);
        }
        for _ in 0..self.len() {
            let index = usize::rand() % order.len();
            let value = self[order[index]];
            result.push(value);
            for i in index..order.len()-1 {
                order[i] = order[i+1];
            }
            order.pop();
        }       
        *self = result;
    }
}

impl<T> Chaos for [T]
where T: Copy + Clone {
    fn chaos(&mut self) {
        let mut _self: Vec<T> = Vec::new();
        for value in self.iter() {
            _self.push(*value);
        }
        _self.chaos();
        for (id, value) in _self.iter().enumerate() {
            self[id] = value.clone();
        }
    }
}

impl Chaos for String {
    fn chaos(&mut self) {
        let mut result = "".to_string();
        let mut _self: Vec<char> = Vec::new();
        for value in self.chars() {
            _self.push(value);
        }
        _self.chaos();
        for value in _self.iter() {
            result += &*value.to_string();
        }
        *self = result;
    }
}