cogl-util: Add an internal wrapper for the ffs function

The ffs function is defined in C99 so if we want to use it in Cogl we
need to provide a fallback for MSVC. This adds a configure check for
the function and then a fallback using a while loop if it is not
available.

http://bugzilla.clutter-project.org/show_bug.cgi?id=2491
This commit is contained in:
Neil Roberts 2010-12-17 16:06:10 +00:00
parent 91c1602306
commit b3058c097d
3 changed files with 33 additions and 0 deletions

View File

@ -218,3 +218,24 @@ _cogl_util_one_at_a_time_mix (unsigned int hash)
return hash;
}
/* The 'ffs' function is part of C99 so it isn't always available */
#ifndef HAVE_FFS
int
_cogl_util_ffs (int num)
{
int i = 1;
if (num == 0)
return 0;
while ((num & 1) == 0)
{
num >>= 1;
i++;
}
return i;
}
#endif /* HAVE_FFS */

View File

@ -95,4 +95,12 @@ _cogl_util_one_at_a_time_hash (unsigned int hash,
unsigned int
_cogl_util_one_at_a_time_mix (unsigned int hash);
/* The 'ffs' function is part of C99 so it isn't always available */
#ifdef HAVE_FFS
#define _cogl_util_ffs ffs
#else
int
_cogl_util_ffs (int num);
#endif
#endif /* __COGL_UTIL_H */

View File

@ -94,6 +94,10 @@ AC_MSG_RESULT([$platform_win32])
AC_SUBST(CLUTTER_LT_VERSION)
AC_SUBST(CLUTTER_LT_LDFLAGS)
dnl The 'ffs' function is part of C99 so it isn't always
dnl available. Cogl has a fallback if needed.
AC_CHECK_FUNCS([ffs])
dnl ========================================================================
# Checks for programs.