patch 8.2.1973: finding a patch number can be a bit slow
Problem: Finding a patch number can be a bit slow.
Solution: Use binary search. (closes #7279)
diff --git a/src/version.c b/src/version.c
index e2affa7..8535ac5 100644
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 1973,
+/**/
1972,
/**/
1971,
@@ -4725,11 +4727,21 @@
int
has_patch(int n)
{
- int i;
+ int h, m, l;
- for (i = 0; included_patches[i] != 0; ++i)
- if (included_patches[i] == n)
+ // Perform a binary search.
+ l = 0;
+ h = (int)(sizeof(included_patches) / sizeof(included_patches[0])) - 1;
+ while (l < h)
+ {
+ m = (l + h) / 2;
+ if (included_patches[m] == n)
return TRUE;
+ if (included_patches[m] < n)
+ h = m;
+ else
+ l = m + 1;
+ }
return FALSE;
}
#endif
@@ -4941,9 +4953,7 @@
{
msg_puts(_("\nIncluded patches: "));
first = -1;
- // find last one
- for (i = 0; included_patches[i] != 0; ++i)
- ;
+ i = (int)(sizeof(included_patches) / sizeof(included_patches[0])) - 1;
while (--i >= 0)
{
if (first < 0)