extern crate rand;
extern crate regex;
extern crate core;
#[doc(hidden)] pub mod impls;
#[doc(hidden)] pub mod boolean;
pub mod array;
pub mod error;
pub mod parse;
pub mod random;
pub mod sorting;
pub mod string;
pub enum RoundingMode { Trunc, Round, Ceil, Floor }
#[derive(Debug)]
enum CharProp { Alpha, AlphaNumeric, AlphaNumericSpace, AlphaSpace, Lower, Numeric, NumericSpace, Upper, Whitespace }
fn char_property(s: &str, prop: CharProp, logic: bool) -> (bool, Vec<bool>) {
let mut b = logic;
let mut c = (*s).chars();
let mut vec = Vec::<bool>::new();
loop {
let n = c.next();
if n == None { break; }
else {
let nu = n.unwrap();
let temp = match prop {
CharProp::Alpha => nu.is_alphabetic(),
CharProp::AlphaNumeric => nu.is_alphanumeric(),
CharProp::AlphaNumericSpace => nu.is_alphanumeric() || nu.is_whitespace(),
CharProp::AlphaSpace => nu.is_alphabetic() || nu.is_whitespace(),
CharProp::Lower => nu.is_lowercase(),
CharProp::Numeric => nu.is_numeric(),
CharProp::NumericSpace => nu.is_numeric() || nu.is_whitespace(),
CharProp::Upper => nu.is_uppercase(),
CharProp::Whitespace => nu.is_whitespace()
};
if logic { b &= temp; }
else { b |= temp; }
vec.push(temp);
}
}
(b, vec)
}
fn has_char_property(s: &str, prop: CharProp) -> (bool, Vec<bool>){
char_property(s, prop, false)
}
fn is_char_property(s: &str, prop: CharProp) -> (bool, Vec<bool>) {
char_property(s, prop, true)
}