1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
use std::char;
pub struct Helper {}
impl Helper {
pub fn sign(x: f32) -> i32 {
if x < 0.0 {
-1
} else if x > 0.0 {
1
} else {
0
}
}
pub fn in_rect(x: f32, y: f32, rx: f32, ry: f32, rw: f32, rh: f32) -> bool {
if x < rx {
return false;
}
if y < ry {
return false;
}
if x > rx + rw {
return false;
}
if y > ry + rh {
return false;
}
true
}
pub fn uniqueid(val: Option<u32>) -> String {
let val = val.unwrap_or_else(rand::random);
fn to_char(value: u32) -> char {
if value > 9 {
let mut ascii = 65 + (value - 10);
if ascii > 90 {
ascii += 6;
}
char::from_u32(ascii).unwrap()
} else {
format!("{}", value).chars().next().unwrap()
}
}
let r = (val % 62) as u32;
let q = (val / 62) as u32;
if q > 0 {
return format!("{}{}", Self::uniqueid(Some(q)), to_char(r));
} else {
return format!("{}", to_char(r));
}
}
}