Slim numerical data compression
1.0
|
00001 // -*- mode: c++; -*- 00002 00007 00008 #ifndef SLIM_SINGLE_CODEC_H 00009 #define SLIM_SINGLE_CODEC_H 00010 00011 #include "bitstream.h" 00012 00013 00014 00019 inline void mexp_golomb_write(obitstream *ob, uint32_t u, 00020 unsigned int order=1) { 00021 unsigned int n = bit_size(u); 00022 if (n > order) { 00023 ob->write_unary(n-order); 00024 ob->writebits(u, n-1); 00025 } else { 00026 ob->write_unary(0); 00027 ob->writebits(u, order); 00028 } 00029 } 00030 00031 00032 00037 inline uint32_t mexp_golomb_read_u32(ibitstream *ib, 00038 unsigned int order=1) { 00039 00040 uint32_t n_minus_order = ib->read_unary(); 00041 if (n_minus_order > 0) { 00042 int n_minus_1 = n_minus_order + order - 1; 00043 00044 uint32_t uval = ib->readbits(n_minus_1); 00045 return uval | bitNset[n_minus_1]; 00046 } else { 00047 return ib->readbits(order); 00048 } 00049 } 00050 00051 00052 00053 00054 00055 #endif // #ifndef SLIM_SINGLE_CODEC_H