getbits.h 1.1 KB

123456789101112131415161718192021222324252627282930313233
  1. /* that's the same file as getits.c but with defines to
  2. force inlining */
  3. static unsigned long rval;
  4. static unsigned char rval_uc;
  5. #define backbits(nob) ((void)( \
  6. bsi.bitindex -= nob, \
  7. bsi.wordpointer += (bsi.bitindex>>3), \
  8. bsi.bitindex &= 0x7 ))
  9. #define getbitoffset() ((-bsi.bitindex)&0x7)
  10. #define getbyte() (*bsi.wordpointer++)
  11. #define getbits(nob) ( \
  12. rval = bsi.wordpointer[0], rval <<= 8, rval |= bsi.wordpointer[1], \
  13. rval <<= 8, rval |= bsi.wordpointer[2], rval <<= bsi.bitindex, \
  14. rval &= 0xffffff, bsi.bitindex += nob, \
  15. rval >>= (24-nob), bsi.wordpointer += (bsi.bitindex>>3), \
  16. bsi.bitindex &= 7,rval)
  17. #define getbits_fast(nob) ( \
  18. rval = (unsigned char) (bsi.wordpointer[0] << bsi.bitindex), \
  19. rval |= ((unsigned long) bsi.wordpointer[1]<<bsi.bitindex)>>8, \
  20. rval <<= nob, rval >>= 8, \
  21. bsi.bitindex += nob, bsi.wordpointer += (bsi.bitindex>>3), \
  22. bsi.bitindex &= 7, rval )
  23. #define get1bit() ( \
  24. rval_uc = *bsi.wordpointer << bsi.bitindex, bsi.bitindex++, \
  25. bsi.wordpointer += (bsi.bitindex>>3), bsi.bitindex &= 7, rval_uc>>7 )