Slim numerical data compression  1.0
slim_single_codec.h
Go to the documentation of this file.
1 // -*- mode: c++; -*-
2 
7 
8 #ifndef SLIM_SINGLE_CODEC_H
9 #define SLIM_SINGLE_CODEC_H
10 
11 #include "bitstream.h"
12 
13 
14 
19 inline void mexp_golomb_write(obitstream *ob, uint32_t u,
20  unsigned int order=1) {
21  unsigned int n = bit_size(u);
22  if (n > order) {
23  ob->write_unary(n-order);
24  ob->writebits(u, n-1);
25  } else {
26  ob->write_unary(0);
27  ob->writebits(u, order);
28  }
29 }
30 
31 
32 
37 inline uint32_t mexp_golomb_read_u32(ibitstream *ib,
38  unsigned int order=1) {
39 
40  uint32_t n_minus_order = ib->read_unary();
41  if (n_minus_order > 0) {
42  int n_minus_1 = n_minus_order + order - 1;
43 
44  uint32_t uval = ib->readbits(n_minus_1);
45  return uval | bitNset[n_minus_1];
46  } else {
47  return ib->readbits(order);
48  }
49 }
50 
51 
52 
53 
54 
55 #endif // #ifndef SLIM_SINGLE_CODEC_H