From fc6b68c59528bce2ea7aa747a40305a528eb99b1 Mon Sep 17 00:00:00 2001 From: Vincent Ollivier Date: Fri, 25 Oct 2024 10:13:37 +0200 Subject: [PATCH 1/4] Remove usage of vec that are not needed anymore --- src/delta_time.rs | 2 +- src/earth_orbit.rs | 10 +++++----- src/ephemeris.rs | 4 ++-- src/moon_phase.rs | 6 +++--- src/moon_transit.rs | 4 ++-- src/sun_transit.rs | 10 +++++----- 6 files changed, 18 insertions(+), 18 deletions(-) diff --git a/src/delta_time.rs b/src/delta_time.rs index aef71d8..35743c3 100644 --- a/src/delta_time.rs +++ b/src/delta_time.rs @@ -14,7 +14,7 @@ pub fn delta_time(year: f64) -> f64 { // From "Delta T: Polynomial Approximation of Time Period 1620-2013" // By M. Khalid, Mariam Sultana, and Faheem Zaidi (2014) - let terms = vec![ + let terms = [ (3.670, 76.541, -253.532, 695.901, -1256.982, 627.152), (3.120, 10.872, -40.744, 236.890, -351.537, 36.612), (2.495, 13.480, 13.075, 8.635, -3.307, -128.294), diff --git a/src/earth_orbit.rs b/src/earth_orbit.rs index 5fd45dc..c7f2156 100644 --- a/src/earth_orbit.rs +++ b/src/earth_orbit.rs @@ -36,7 +36,7 @@ fn get_time_of(event: Event, timestamp: i64) -> i64 { fn get_jdme(event: Event, y: f64) -> f64 { // For the years -1000 to +1000 - let jdme_terms_before_1000 = vec![ + let jdme_terms_before_1000 = [ (1721_139.29189, 365_242.13740, 0.06134, 0.00111, -0.00071), // March Equinoxe (1721_233.25401, 365_241.72562, -0.05323, 0.00907, -0.00025), // June Solstice (1721_325.70455, 365_242.49558, -0.11677, -0.00297, 0.00074), // September Equinoxe @@ -44,7 +44,7 @@ fn get_jdme(event: Event, y: f64) -> f64 { ]; // For the years +1000 to +3000 - let jdme_terms_after_1000 = vec![ + let jdme_terms_after_1000 = [ (2451_623.80984, 365_242.37404, 0.05169, -0.00411, -0.00057), // March Equinoxe (2451_716.56767, 365_241.62603, 0.00325, 0.00888, -0.00030), // June Solstice (2451_810.21715, 365_242.01767, -0.11575, 0.00337, 0.00078), // September Equinoxe @@ -67,7 +67,7 @@ fn get_jdme(event: Event, y: f64) -> f64 { } fn get_periodic_terms(t: f64) -> f64 { - let terms = vec![ + let terms = [ (485.0, 324.96, 1934.136), (203.0, 337.23, 32964.467), (199.0, 342.08, 20.186), @@ -169,7 +169,7 @@ mod tests { let accuracy = 11; // TODO: Improve accuracy let solstice_december_2012 = parse_time("2012-12-21T11:11:37.00+00:00"); - let times = vec![ + let times = [ get_previous_december_solstice(parse_time("2014-06-01T00:00:00.00+00:00")), parse_time("2013-06-01T00:00:00.00+00:00"), ]; @@ -184,7 +184,7 @@ mod tests { let accuracy = 13; // TODO: Improve accuracy let solstice_december_2013 = parse_time("2013-12-21T17:11:00.00+00:00"); - let times = vec![ + let times = [ get_next_december_solstice(parse_time("2012-06-01T00:00:00.00+00:00")), parse_time("2013-06-01T00:00:00.00+00:00"), ]; diff --git a/src/ephemeris.rs b/src/ephemeris.rs index 847ea65..443fbb5 100644 --- a/src/ephemeris.rs +++ b/src/ephemeris.rs @@ -16,7 +16,7 @@ pub fn get_ephemeris(timestamp: i64, longitude: f64, latitude: f64) -> BTreeMap< events.insert(timestamp, "Current".to_string()); - let es = vec![ + let es = [ ("Equinox", get_next_march_equinox(day_begin_at)), ("Equinox", get_next_september_equinox(day_begin_at)), ("Solstice", get_next_december_solstice(day_begin_at)), @@ -29,7 +29,7 @@ pub fn get_ephemeris(timestamp: i64, longitude: f64, latitude: f64) -> BTreeMap< } let n = get_lunation_number(day_begin_at); // FIXME: Potential bug here - let es = vec![ + let es = [ ("New Moon", get_new_moon(n)), ("First Quarter Moon", get_first_quarter_moon(n + 0.25)), ("Full Moon", get_full_moon(n + 0.50)), diff --git a/src/moon_phase.rs b/src/moon_phase.rs index b82290e..f619c03 100644 --- a/src/moon_phase.rs +++ b/src/moon_phase.rs @@ -74,7 +74,7 @@ fn get_time_of(phase: MoonPhase, lunation_number: f64) -> i64 { // Correction to be added to JDE // [New Moon, First Quarter, Full Moon, Last Quarter] - let num_cors = vec![ + let num_cors = [ [-0.40720, -0.62801, -0.40614, -0.62801], [ 0.17241, 0.17172, 0.17302, 0.17172], [ 0.01608, -0.01183, 0.01614, -0.01183], @@ -104,7 +104,7 @@ fn get_time_of(phase: MoonPhase, lunation_number: f64) -> i64 { // Multiply each previous terms by E to a given power // [new moon, first quarter, full moon, last quarter] - let pow_cors = vec![ + let pow_cors = [ [0, 0, 0, 0], [1, 1, 1, 1], [0, 1, 0, 1], @@ -138,7 +138,7 @@ fn get_time_of(phase: MoonPhase, lunation_number: f64) -> i64 { let terms = [s, m, f, o]; // [new and full moon, first and last quarter] - let mul_cors = vec![ + let mul_cors = [ [[ 0.0, 1.0, 0.0, 0.0], [ 0.0, 1.0, 0.0, 0.0]], [[ 1.0, 0.0, 0.0, 0.0], [ 1.0, 0.0, 0.0, 0.0]], [[ 0.0, 2.0, 0.0, 0.0], [ 1.0, 1.0, 0.0, 0.0]], diff --git a/src/moon_transit.rs b/src/moon_transit.rs index ed4233e..7535441 100644 --- a/src/moon_transit.rs +++ b/src/moon_transit.rs @@ -61,7 +61,7 @@ fn get_moon_position(julian_day: f64) -> (f64, f64, f64) { // Periodic terms for the longitude, distance and latitude of the Moon // D, M, M', F, sine, cosine, sine - let terms = vec![ + let terms = [ (0.0, 0.0, 1.0, 0.0, 6_288_774.0, -20_905_355.0, 0.0), (2.0, 0.0, -1.0, 0.0, 1_274_027.0, -3_699_111.0, 0.0), (2.0, 0.0, 0.0, 0.0, 658_314.0, -2_955_968.0, 0.0), @@ -376,7 +376,7 @@ mod tests { #[test] fn get_moonrise_test() { let accuracy = 90; - let times = vec![ + let times = [ ("2000-01-01T01:50:14+00:00", "2000-01-01T12:00:00+00:00", 0.0, 0.0), ("2000-01-01T02:37:20+00:00", "2000-01-01T12:00:00+00:00", 50.0, 0.0), ("2000-01-01T06:06:16+00:00", "2000-01-01T12:00:00+00:00", 50.0, -50.0), diff --git a/src/sun_transit.rs b/src/sun_transit.rs index c1674bf..3709506 100644 --- a/src/sun_transit.rs +++ b/src/sun_transit.rs @@ -169,7 +169,7 @@ pub fn nutation(julian_century: f64) -> (f64, f64) { let pm = modulo(pm, 360.0); let fm = modulo(fm, 360.0); - let terms = vec![ + let terms = [ // D M M' F Ω sine coef cosine coef [ 0.0, 0.0, 0.0, 0.0, 1.0, -171_996.0, -174.2, 92_025.0, 8.9], [-2.0, 0.0, 0.0, 2.0, 2.0, -13_187.0, -1.6, 5736.0, -3.1], @@ -296,7 +296,7 @@ mod tests { get_noon(parse_time("1992-10-13T00:00:00+00:00"), 174.0); // http://www.esrl.noaa.gov/gmd/grad/solcalc/ - let times = vec![ + let times = [ ("2010-06-21T12:01:46+00:00", "2010-06-21T12:00:00+00:00", 45.0, 0.0), ("2010-09-23T11:52:25+00:00", "2010-09-23T12:00:00+00:00", 45.0, 0.0), ("2010-12-21T11:58:03+00:00", "2010-12-21T12:00:00+00:00", 45.0, 0.0) @@ -310,7 +310,7 @@ mod tests { #[test] fn get_midnight_test() { // http://www.esrl.noaa.gov/gmd/grad/solcalc/ - let times = vec![ + let times = [ ("2000-01-01T00:03:18+00:00", "2000-01-01T12:00:00+00:00", 45.0, 0.0), ("1973-03-20T00:07:32+00:00", "1973-03-20T12:00:00+00:00", 45.0, 0.0), ("1973-03-21T00:07:15+00:00", "1973-03-21T12:00:00+00:00", 45.0, 0.0), @@ -327,7 +327,7 @@ mod tests { // TODO: Test at latitudes > 70 // http://www.esrl.noaa.gov/gmd/grad/solcalc/ - let times = vec![ + let times = [ ("2010-06-21T04:13:15+00:00", "2010-06-21T12:00:00+00:00", 45.0, 0.0), ("2010-09-23T05:48:17+00:00", "2010-09-23T12:00:00+00:00", 45.0, 0.0), ("2010-12-21T07:35:09+00:00", "2010-12-21T12:00:00+00:00", 45.0, 0.0), @@ -350,7 +350,7 @@ mod tests { // TODO: Test at latitudes > 70 // http://www.esrl.noaa.gov/gmd/grad/solcalc/ - let times = vec![ + let times = [ ("2010-06-21T19:50:16+00:00", "2010-06-21T12:00:00+00:00", 45.0, 0.0), ("2010-09-23T17:56:34+00:00", "2010-09-23T12:00:00+00:00", 45.0, 0.0), ("2010-12-21T16:20:58+00:00", "2010-12-21T12:00:00+00:00", 45.0, 0.0), From 1421ae4f80e8ac0dd797b074abfdbaf2a02c8924 Mon Sep 17 00:00:00 2001 From: Vincent Ollivier Date: Fri, 25 Oct 2024 10:13:57 +0200 Subject: [PATCH 2/4] Use result directly instead of converting to option --- src/main.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main.rs b/src/main.rs index bd350e2..ac3cd62 100644 --- a/src/main.rs +++ b/src/main.rs @@ -22,7 +22,7 @@ fn main() { let args: Vec = env::args().map(|arg| // Encode float arguments that can be negative to avoid getopts panic // from unrecognized options. - if let Some(x) = arg.parse::().ok() { + if let Ok(x) = arg.parse() { encode_float(x) } else { arg From 8f4dc1cbda858d610e7088446ab41a4af137ba16 Mon Sep 17 00:00:00 2001 From: Vincent Ollivier Date: Fri, 25 Oct 2024 10:14:16 +0200 Subject: [PATCH 3/4] Use &str instead of String and .clone() --- src/reverse.rs | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/reverse.rs b/src/reverse.rs index f9c2f89..bfff92b 100644 --- a/src/reverse.rs +++ b/src/reverse.rs @@ -1,12 +1,11 @@ use geodate::*; -use alloc::string::String; use alloc::vec::Vec; /// Reverse a geodate into a timestamp -pub fn get_timestamp(format: String, date: String, longitude: f64) -> i64 { - let y = date_year(date.clone()); - let n = date_index(date.clone()); +pub fn get_timestamp(format: &str, date: &str, longitude: f64) -> i64 { + let y = date_year(date); + let n = date_index(date); // Approximate timestamps of bounds let mut min = (y - 2) * 365 * 86400; @@ -30,7 +29,7 @@ pub fn get_timestamp(format: String, date: String, longitude: f64) -> i64 { loop { let mid = (min + max) / 2; - let i = date_index(get_formatted_date(&format, mid, longitude)); + let i = date_index(&get_formatted_date(&format, mid, longitude)); if i == n || mid == min || mid == max { return mid; } @@ -43,7 +42,7 @@ pub fn get_timestamp(format: String, date: String, longitude: f64) -> i64 { } // Extract year from a geodate string -fn date_year(date: String) -> i64 { +fn date_year(date: &str) -> i64 { let parts: Vec<_> = date.split(":").collect(); let y = match parts.len() { @@ -56,8 +55,8 @@ fn date_year(date: String) -> i64 { } // Transform a geodate string into an integer for comparison -fn date_index(date: String) -> i64 { - let year = date_year(date.clone()); +fn date_index(date: &str) -> i64 { + let year = date_year(date); let mut index = date.replace(":", "").parse::().unwrap(); if index < 0 { // Special case for negative years index = (year + 0) * 100_000_000 - (index % 100_000_000); From 4f5a00e4456149da51cbf064ca041ad1c929f99b Mon Sep 17 00:00:00 2001 From: Vincent Ollivier Date: Fri, 25 Oct 2024 10:51:18 +0200 Subject: [PATCH 4/4] Fix main --- src/main.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main.rs b/src/main.rs index ac3cd62..198472e 100644 --- a/src/main.rs +++ b/src/main.rs @@ -77,7 +77,7 @@ fn main() { // Convert geodate string back into unix timestamp if matches.free.len() == 4 && matches.free[3].contains(":") { - println!("{}", get_timestamp(format, matches.free[3].clone(), lon)); + println!("{}", get_timestamp(&format, &matches.free[3], lon)); return; }