bug-hurd
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH 2/2] console-client: Fix lower range of binary search


From: Justus Winter
Subject: Re: [PATCH 2/2] console-client: Fix lower range of binary search
Date: Fri, 05 Jun 2015 18:37:25 +0200
User-agent: alot/0.3.5

Quoting Diego Nieto Cid (2015-06-05 03:58:10)
> To prevent infinite recursion range checking was introduced
> as an exit condition adding two extra comparisons on each
> recursive call.
> 
> By fixing the range used by the recursive call over the lower
> half of the array one can avoid penalizing successful lookups
> while still preventing infinite recursion due to `first`
> parameter being greater than `last` parameter.

Merged.  This is indeed much nicer, thanks for following up on this :)

> 
> * console-client/xkb/kstoucs.c (find_ucs): don't remove middle from the
> lower range. Remove extra comparisons.
> ---
>  console-client/xkb/kstoucs.c | 8 ++++----
>  1 file changed, 4 insertions(+), 4 deletions(-)
> 
> diff --git a/console-client/xkb/kstoucs.c b/console-client/xkb/kstoucs.c
> index fb62445..eb47bde 100644
> --- a/console-client/xkb/kstoucs.c
> +++ b/console-client/xkb/kstoucs.c
> @@ -17,15 +17,15 @@ find_ucs (int keysym, struct ksmap *first, struct ksmap 
> *last)
>  
>    if (middle->keysym == keysym)
>      return middle->ucs; /* base case: needle found. */
> -  else if (first == last               /* empty search space */
> -           || keysym < first->keysym   /* lookup failure */
> -           || keysym > last->keysym)   /* lookup failure */
> +  else if (first == last) /* empty search space */
>      return 0;
>    /* recursive cases: halve search space. */
>    else if (middle->keysym < keysym)
>      return find_ucs (keysym, middle+1, last);
>    else if (middle->keysym > keysym)
> -    return find_ucs (keysym, first, middle-1);
> +    /* don't remove middle from the range to compensate
> +       for rounding down in it's calculation */
> +    return find_ucs (keysym, first, middle);
>    return 0;
>  }
>  
> -- 
> 2.1.4
> 
> 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]