00001
00002
00011 #ifndef CXXUTILS_BITPACKER_H
00012 #define CXXUTILS_BITPACKER_H
00013
00014
00015 #include <stdint.h>
00016 #include <cassert>
00017
00018
00019 namespace CxxUtils {
00020
00021
00032 template <class STREAM>
00033 class BitPacker
00034 {
00035 public:
00041 BitPacker (uint8_t nbits, STREAM& stream);
00042
00043
00049 ~BitPacker();
00050
00051
00057 void pack (uint32_t x);
00058
00059
00060 private:
00062 uint32_t m_buf;
00063
00065 uint8_t m_nbuf;
00066
00068 uint8_t m_nbits;
00069
00071 STREAM& m_stream;
00072 };
00073
00074
00084 template <class STREAM>
00085 class BitPacker8
00086 {
00087 public:
00092 BitPacker8 (STREAM& stream);
00093
00094
00100 BitPacker8 (uint8_t nbits, STREAM& stream);
00101
00102
00108 ~BitPacker8();
00109
00110
00116 void pack (uint32_t x);
00117
00118
00119 private:
00121 uint32_t m_buf;
00122
00124 uint8_t m_nbuf;
00125
00127 STREAM& m_stream;
00128 };
00129
00130
00140 template <class STREAM>
00141 class BitPacker16
00142 {
00143 public:
00149 BitPacker16 (STREAM& stream);
00150
00151
00157 BitPacker16 (uint8_t nbits, STREAM& stream);
00158
00159
00165 ~BitPacker16();
00166
00167
00173 void pack (uint32_t x);
00174
00175
00176 private:
00178 uint32_t m_buf;
00179
00181 uint8_t m_nbuf;
00182
00184 STREAM& m_stream;
00185 };
00186
00187
00188 }
00189
00190
00191 #include "CxxUtils/BitPacker.icc"
00192
00193
00194 #endif // not CXXUTILS_BITPACKER_H
00195