huffman.c macros

Ian MacIntosh <[email protected]>
Newsgroups gmane.comp.audio.mad.devel
Message-ID <[email protected]>
I was building this on Solaris and noticed the macros for PTR and V only 
work for little-endian or gcc compilers. So I made a few changes, below 
are the macros rewritten for more portability:

for huffquad

# if defined(__GNUC__) || (__SUNPRO_C >= 0x556)
#  define PTR(offs, bits)	{ .ptr =   { 0, bits, offs       } }
#  define V(v, w, x, y, hlen)	{ .value = { 1, hlen, v, w, x, y } }
#elif defined(WORDS_BIGENDIAN)
#  define PTR(offs, bits)	{ { 0, bits, offs } }
#  define V(v, w, x, y, hlen)	{ { 1, hlen, (v << 11) | (w << 10) |  \
                                              (x << 9) | (y << 8) } }
#else
#  define PTR(offs, bits)	{ { 0, bits, offs } }
#  define V(v, w, x, y, hlen)	{ { 1, hlen, (v << 0) | (w << 1) |  \
                                              (x << 2) | (y << 3) } }
# endif

for huffpair

# if defined(__GNUC__) || (__SUNPRO_C >= 0x556)
#  define PTR(offs, bits)	{ .ptr=   { 0, bits, offs } }
#  define V(x, y, hlen)		{ .value= { 1, hlen, x, y } }
# elif defined(WORDS_BIGENDIAN)
#  define PTR(offs, bits)	{ { 0, bits, offs } }
#  define V(x, y, hlen)		{ { 1, hlen, (x << 8) | (y << 4) } }
# else
#  define PTR(offs, bits)	{ { 0, bits, offs } }
#  define V(x, y, hlen)		{ { 1, hlen, (x << 0) | (y << 4) } }
# endif

instead of the ptr: and value: it uses the C99 designator syntax, also 
I've changed the shifts for big-endian.

obviously the WORDS_BIGENDIAN needs to come from the config.h.

regards,
Ian
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.