diff options
author | Matthias Beyer <mail@beyermatthias.de> | 2017-09-16 10:50:09 +0200 |
---|---|---|
committer | Matthias Beyer <mail@beyermatthias.de> | 2017-09-16 10:51:21 +0200 |
commit | b1e120f29b6a8886c7f5397b3f3d838bd9b140b9 (patch) | |
tree | 1acb0b5b430e5a3d1f0429ed187ea3db53d2c8a3 /src/util.rs | |
parent | 3660f0608e25cf0c48561a5c89f4fa080a0eb564 (diff) |
Move utility functions to util package
Diffstat (limited to 'src/util.rs')
-rw-r--r-- | src/util.rs | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/src/util.rs b/src/util.rs index 3062c84..4f62849 100644 --- a/src/util.rs +++ b/src/util.rs @@ -1,3 +1,92 @@ +#[inline] +pub fn adjust_times_add(mut y: i64, mut mo: i64, mut d: i64, mut h: i64, mut mi: i64, mut s: i64) + -> (i64, i64, i64, i64, i64, i64) +{ + macro_rules! fix { + { + $base:ident, + $border:expr, + $next:ident + } => { + while $base >= $border { + $next += 1; + $base -= $border; + } + } + } + + fix! { s , 60, mi } + fix! { mi, 60, h } + fix! { h , 24, d } + + if mo == 1 || mo == 3 || mo == 5 || mo == 7 || mo == 8 || mo == 10 || mo == 12 { + fix! { d , 31, mo } + } else { + fix! { d , 30, mo } + } + + fix! { mo, 12, y } + + (y, mo, d, h, mi, s) +} + +#[inline] +pub fn adjust_times_sub(mut y: i64, mut mo: i64, mut d: i64, mut h: i64, mut mi: i64, mut s: i64) + -> (i64, i64, i64, i64, i64, i64) +{ + + println!("s < 0 -> = {}", s); + if s < 0 { + println!("mi -= {}", (s.abs() / 60) + 1); + println!("s = {}", (60 - (0 - s).abs())); + + mi -= (s.abs() / 60) + 1; + s = 60 - (0 - s).abs(); + } + println!(""); + + println!("mi < 0 -> = {}", mi); + if mi < 0 { + println!("h -= {}", (mi.abs() / 60) + 1); + println!("mi = {}", (60 - (0 - mi).abs())); + + h -= (mi.abs() / 60) + 1; + mi = 60 - (0 - mi).abs(); + } + println!(""); + + println!("h < 0 -> = {}", h); + if h < 0 { + println!("d -= {}", (h.abs() / 24) + 1); + println!("h = {}", (24 - (0 - h).abs())); + + d -= (h.abs() / 24) + 1; + h = 24 - (0 - h).abs(); + } + println!(""); + + println!("d < 1 -> = {}", d); + if d < 1 { + println!("mo -= {}", (d.abs() / 32) + 1); + println!("d = {}", (31 - (0 - d).abs())); + + mo -= (d.abs() / 32) + 1; + d = 31 - (0 - d).abs(); + } + println!(""); + + println!("mo < 1 -> = {}", mo); + if mo < 1 { + println!("y -= {}", (mo.abs() / 13) + 1); + println!("mo = {}", (12 - (0 - mo).abs())); + + y -= (mo.abs() / 13) + 1; + mo = 12 - (0 - mo).abs(); + } + + (y, mo, d, h, mi, s) +} + #[inline] pub fn get_num_of_days_in_month(y: i32, m: u32) -> u32 { |