[Dovecot] [PATCH 4/5] optimize double cmp() call in bsearch_insert_pos()
Max Kellermann
max at duempel.org
Thu Mar 15 16:35:02 EET 2007
Since the comparison function cmp() has already been called with the
correct parameters in the loop, it is enough to check if the
assignment "left_idx = idx+1" has been executed. The special case
"nmemb==0" is also handled well by this trick.
---
src/lib/bsearch-insert-pos.c | 7 ++-----
1 files changed, 2 insertions(+), 5 deletions(-)
diff --git a/src/lib/bsearch-insert-pos.c b/src/lib/bsearch-insert-pos.c
index 7e5f8ae..8e63cf2 100644
--- a/src/lib/bsearch-insert-pos.c
+++ b/src/lib/bsearch-insert-pos.c
@@ -28,11 +28,8 @@ bool bsearch_insert_pos(const void *key, const void *base, unsigned int nmemb,
}
}
- if (idx < nmemb) {
- p = CONST_PTR_OFFSET(base, idx * size);
- if (cmp(key, p) > 0)
- ++idx;
- }
+ if (left_idx > idx)
+ ++idx;
*idx_r = idx;
return FALSE;
More information about the dovecot
mailing list