From 081e4eb4f4b24d5eb90631a53ea5a7bba2293727 Mon Sep 17 00:00:00 2001 From: hniksic Date: Sun, 14 Apr 2002 11:39:43 -0700 Subject: [PATCH] [svn] Use a marginally faster implementation of binary search. Published in . --- src/ChangeLog | 6 ++++++ src/init.c | 24 ++++++++++++------------ 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index ec98aaf0..09d4bc70 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,9 @@ +2002-04-14 Hrvoje Niksic + + * init.c (comind): Use a marginally faster implementation of + binary search. To quote Martin Buchholz, "a nanosecond saved is a + nanosecond earned." + 2002-04-14 Hrvoje Niksic * main.c (print_help): Document `--post-data' and `--post-file'. diff --git a/src/init.c b/src/init.c index 0a5bc633..e860b671 100644 --- a/src/init.c +++ b/src/init.c @@ -194,25 +194,25 @@ static struct { { "waitretry", &opt.waitretry, cmd_time } }; -/* Return index of COM if it is a valid command, or -1 otherwise. COM - is looked up in `commands' using binary search algorithm. */ +/* Look up COM in the commands[] array and return its index. If COM + is not found, -1 is returned. This function uses binary search. */ + static int comind (const char *com) { - int min = 0, max = ARRAY_SIZE (commands) - 1; + int lo = 0, hi = ARRAY_SIZE (commands) - 1; - do + while (lo <= hi) { - int i = (min + max) / 2; - int cmp = strcasecmp (com, commands[i].name); - if (cmp == 0) - return i; - else if (cmp < 0) - max = i - 1; + int mid = (lo + hi) >> 1; + int cmp = strcasecmp (com, commands[mid].name); + if (cmp < 0) + hi = mid - 1; + else if (cmp > 0) + lo = mid + 1; else - min = i + 1; + return mid; } - while (min <= max); return -1; } -- 2.39.2