bitstream.c: Convert GET_DATA macro to inline function.
authorAndre Noll <maan@tuebingen.mpg.de>
Wed, 1 Apr 2015 02:55:50 +0000 (02:55 +0000)
committerAndre Noll <maan@tuebingen.mpg.de>
Sun, 20 Sep 2015 18:32:21 +0000 (20:32 +0200)
There is no benefit from defining this as a macro. With the inline
function we get type safety for free, and the new version is better
readable.

bitstream.c

index cf81559..1593b99 100644 (file)
 #include "wma.h"
 #include "bitstream.h"
 
-/** Read an 8, 16, or 32 bit entity from a VLC table. */
-#define GET_DATA(v, table, i, size) \
-{\
-       const uint8_t *ptr = (const uint8_t *)table + i * size; \
-       switch (size) { \
-       case 1: \
-               v = *(const uint8_t *)ptr; \
-               break; \
-       case 2: \
-               v = *(const uint16_t *)ptr; \
-               break; \
-       default: \
-               v = *(const uint32_t *)ptr; \
-               break; \
-       } \
+static inline uint32_t get_data(const void *table, int i, int size)
+{
+       const uint8_t *ptr = (const uint8_t *)table + i * size;
+       uint32_t v;
+
+       switch (size) {
+       case 1:
+               v = *(const uint8_t *)ptr;
+               break;
+       case 2:
+               v = *(const uint16_t *)ptr;
+               break;
+       default:
+               v = *(const uint32_t *)ptr;
+               break;
+       }
+       return v;
 }
 
 static void alloc_table(struct vlc *vlc, int size)
@@ -68,12 +70,12 @@ static int build_table(struct vlc *vlc, int table_nb_bits, int nb_codes,
 
        /* map codes and compute auxiliary table sizes */
        for (i = 0; i < nb_codes; i++) {
-               GET_DATA(n, bits, i, 1);
+               n = get_data(bits, i, 1);
                /* we accept tables with holes */
                n -= n_prefix;
                if (n <= 0)
                        continue;
-               GET_DATA(code, codes, i, codes_size);
+               code = get_data(codes, i, codes_size);
                /* if code matches the prefix, it is in the table */
                if ((code >> n) != code_prefix)
                        continue;