src/mathutils.c: add aubio_is_power_of_two and aubio_next_power_of_two
authorPaul Brossier <piem@piem.org>
Wed, 7 Oct 2009 16:26:59 +0000 (18:26 +0200)
committerPaul Brossier <piem@piem.org>
Wed, 7 Oct 2009 16:26:59 +0000 (18:26 +0200)
configure.ac
src/aubio_priv.h
src/mathutils.c
src/mathutils.h
wscript

index 308d266f12f105e542265a420d3dbd525093b9bd..7fb40c691e01bc0a776460a465a86c6a57abfe1a 100644 (file)
@@ -114,7 +114,7 @@ dnl Check for required libraries
 AC_CHECK_LIB(pthread, pthread_create)
 
 dnl Check for header files
-AC_CHECK_HEADERS([string.h stdlib.h stdio.h math.h errno.h stdarg.h unistd.h signal.h],,)
+AC_CHECK_HEADERS([string.h stdlib.h stdio.h math.h limits.h errno.h stdarg.h unistd.h signal.h],,)
 AC_CHECK_HEADERS(fftw3.h,,AC_MSG_ERROR([Ouch! missing fftw3.h header]))
 AC_ARG_ENABLE(complex,
   AC_HELP_STRING([--enable-complex],[compile with complex.h [[default=auto]]]),
index 683056fc1548d57e43719af02f6d17578c2a89a1..ab950429222a1aa2cf6239a275b8c56380c2b954 100644 (file)
 #include <string.h>
 #endif
 
+#if HAVE_LIMITS_H
+#include <limits.h> // for CHAR_BIT, in C99 standard
+#endif
+
 #include "types.h"
 
 /****
index 66dab58e3f738d476f5d7165d33bd9aa05ace890..b99a96b43f42f153ddd1b435d3bcc9ac60b44209 100644 (file)
@@ -409,6 +409,25 @@ aubio_miditobin (smpl_t midi, smpl_t samplerate, smpl_t fftsize)
   return aubio_freqtobin (freq, samplerate, fftsize);
 }
 
+uint_t
+aubio_is_power_of_two(uint_t a) {
+  if ((a & a-1) == 0) {
+    return 1;
+  } else {
+    return 0; 
+  }
+}
+
+uint_t
+aubio_next_power_of_two(uint_t a) {
+  uint_t i;
+  a--;
+  for (i = 0; i < sizeof(uint_t) * CHAR_BIT; i++ ) {
+    a = a | a >> 1;
+  }
+  return a+1;
+}
+
 smpl_t
 aubio_db_spl (fvec_t * o)
 {
index d71cf77f4335ed8fb97968d9234f119d63983f93..de970493e2191c5591ca136a4a812233773a863c 100644 (file)
@@ -316,6 +316,12 @@ smpl_t aubio_freqtomidi (smpl_t freq);
 /** convert midi value (0-128) to frequency (Hz) */
 smpl_t aubio_miditofreq (smpl_t midi);
 
+/** return 1 if a is a power of 2, 0 otherwise */
+uint_t aubio_is_power_of_two(uint_t a);
+
+/** return the next power of power of 2 greater than a */
+uint_t aubio_next_power_of_two(uint_t a);
+
 /** compute sound pressure level (SPL) in dB
 
   This quantity is often wrongly called 'loudness'.
diff --git a/wscript b/wscript
index d8fe5a403ace6caabfe16749be8df1277c315d3c..58bd1c9b9d89f7a192b097b95b23507508f3b220 100644 (file)
--- a/wscript
+++ b/wscript
@@ -53,6 +53,7 @@ def configure(conf):
   conf.check(header_name='stdio.h')
   conf.check(header_name='math.h')
   conf.check(header_name='string.h')
+  conf.check(header_name='limits.h')
 
   # optionally use complex.h
   if (Options.options.disable_complex == False):