From c418c2dbbebfbdca5ee0ef484c300281cdeaeece Mon Sep 17 00:00:00 2001 From: Jiahao XU Date: Thu, 21 Jul 2022 12:44:54 +1000 Subject: [PATCH] Optimize arg parsing: Avoid O(n) `Vec::remove` Signed-off-by: Jiahao XU --- src/main.rs | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/main.rs b/src/main.rs index 51847dcb..a11e72f0 100644 --- a/src/main.rs +++ b/src/main.rs @@ -186,9 +186,20 @@ async fn entry(jobserver_client: LazyJobserverClient) -> Result<()> { // `cargo run -- --help` gives ["target/debug/cargo-binstall", "--help"] // `cargo binstall --help` gives ["/home/ryan/.cargo/bin/cargo-binstall", "binstall", "--help"] let mut args: Vec = std::env::args_os().collect(); - if args.len() > 1 && args[1] == "binstall" { - args.remove(1); - } + let args = if args.len() > 1 && args[1] == "binstall" { + // Equivalent to + // + // args.remove(1); + // + // But is O(1) + args.swap(0, 1); + let mut args = args.into_iter(); + drop(args.next().unwrap()); + + args + } else { + args.into_iter() + }; // Load options let mut opts = Options::parse_from(args);