00001
00002
00011 #ifndef CXXUTILS_BITUNPACKER_H
00012 #define CXXUTILS_BITUNPACKER_H
00013
00014
00015 #include <stdint.h>
00016 #include <cassert>
00017
00018
00019 namespace CxxUtils {
00020
00021
00032 template <class STREAM>
00033 class BitUnpacker
00034 {
00035 public:
00041 BitUnpacker (uint8_t nbits, STREAM& stream);
00042
00043
00047 uint32_t unpack();
00048
00049
00050 private:
00052 uint32_t m_buf;
00053
00055 uint8_t m_nbuf;
00056
00058 uint8_t m_nbits;
00059
00061 STREAM& m_stream;
00062
00064 uint32_t m_mask;
00065 };
00066
00067
00078 template <class STREAM>
00079 class BitUnpacker8
00080 {
00081 public:
00086 BitUnpacker8 (STREAM& stream);
00087
00088
00094 BitUnpacker8 (uint8_t nbits, STREAM& stream);
00095
00096
00100 uint32_t unpack();
00101
00102
00103 private:
00105 uint32_t m_buf;
00106
00108 uint8_t m_nbuf;
00109
00111 STREAM& m_stream;
00112 };
00113
00114
00125 template <class STREAM>
00126 class BitUnpacker16
00127 {
00128 public:
00133 BitUnpacker16 (STREAM& stream);
00134
00135
00141 BitUnpacker16 (uint8_t nbits, STREAM& stream);
00142
00143
00147 uint32_t unpack();
00148
00149
00150 private:
00152 uint32_t m_buf;
00153
00155 uint8_t m_nbuf;
00156
00158 STREAM& m_stream;
00159 };
00160
00161
00162 }
00163
00164
00165 #include "CxxUtils/BitUnpacker.icc"
00166
00167
00168 #endif // not CXXUTILS_BITUNPACKER_H