[FFmpeg-devel] [PATCH 1/2] avutil/common: add FFDIFFSIGN macro

Michael Niedermayer michael at niedermayer.cc
Sun Nov 1 23:54:29 CET 2015


On Sun, Nov 01, 2015 at 12:19:47PM -0500, Ganesh Ajjanagadde wrote:
> This is of use for defining comparator callbacks. Common approaches like
> return x-y are not safe due to the risks of overflow.
> Furthermore, the (x > y) - (x < y) trick is optimized to branchless
> code.
> This also documents this macro accordingly.
> 
> Signed-off-by: Ganesh Ajjanagadde <gajjanagadde at gmail.com>
> ---
>  libavutil/common.h | 11 +++++++++++
>  1 file changed, 11 insertions(+)
> 
> diff --git a/libavutil/common.h b/libavutil/common.h
> index 6594f7d..6f0f582 100644
> --- a/libavutil/common.h
> +++ b/libavutil/common.h
> @@ -76,6 +76,17 @@
>   */
>  #define FFNABS(a) ((a) <= 0 ? (a) : (-(a)))
>  
> +/**
> + * Comparator.
> + * For two numerical expressions x and y, gives 1 if x > y, -1 if x < y, and 0
> + * if x == y. This is useful for instance in a qsort comparator callback.
> + * Furthermore, compilers are able to optimize this to branchless code, and
> + * there is no risk of overflow with signed types.
> + * As with many macros, this evaluates its argument multiple times, it thus
> + * must not have a side-effect.
> + */
> +#define FFDIFFSIGN(x,y) (((x)>(y)) - ((x)<(y)))

LGTM
(maybe wait a bit before pushing so others can comment too, people
 may find the text too verbose or something else)


[...]
-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

It is dangerous to be right in matters on which the established authorities
are wrong. -- Voltaire
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 181 bytes
Desc: Digital signature
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20151101/cded6b7e/attachment.sig>


More information about the ffmpeg-devel mailing list