Slim numerical data compression
1.0
|
Go to the documentation of this file.
23 #ifndef SLIM_BITSTREAM_H
24 #define SLIM_BITSTREAM_H
29 #include "bit_constants.h"
36 bitstream(FILE *file,
int buffersize=DEFAULT_IOBUFFER_SIZE);
38 int buffersize=DEFAULT_IOBUFFER_SIZE);
45 virtual void setupstream();
46 virtual void windup()=0;
47 virtual int get_bytes_used();
49 virtual void print()
const = 0;
52 static const int Bits_per_word = 8*
sizeof(Word_t);
68 enum {DEFAULT_IOBUFFER_SIZE=1024*1024};
69 enum {MAX_BITSTREAM_BUFSIZE=16*1024*1024};
79 obitstream(FILE *file,
int buffersize=DEFAULT_IOBUFFER_SIZE);
81 int buffersize=DEFAULT_IOBUFFER_SIZE);
84 void writebits(uint32_t data,
int nbits);
85 void writestring(
const char *str,
bool write_trailing_null=
false);
86 template <
typename T>
void writeword(
const T data);
87 void write_unary(
unsigned int value);
88 virtual void print()
const;
91 void flush(
bool flush_trailing_bits);
100 #ifdef DEBUG_READBITS
101 int c1,c2, c3, c4, c5, c6;
106 ibitstream(FILE *file,
int buffersize=DEFAULT_IOBUFFER_SIZE);
108 int buffersize=DEFAULT_IOBUFFER_SIZE);
113 virtual void print()
const;
114 virtual int get_bytes_used();
115 Word_t readbits(
int nbits);
116 int32_t readbits_int(
int nbits);
118 int readstring(
char *s,
int count=-1);
126 int partial_word_bitptr;
145 if (i>lowestNset32bits[15]) {
146 if (i>lowestNset32bits[23]) {
147 if (i>lowestNset32bits[27]) {
148 if (i>lowestNset32bits[29]) {
149 if (i>lowestNset32bits[30]) {
155 if (i>lowestNset32bits[28]) {
162 if (i>lowestNset32bits[25]) {
163 if (i>lowestNset32bits[26]) {
169 if (i>lowestNset32bits[24]) {
177 if (i>lowestNset32bits[19]) {
178 if (i>lowestNset32bits[21]) {
179 if (i>lowestNset32bits[22]) {
185 if (i>lowestNset32bits[20]) {
192 if (i>lowestNset32bits[17]) {
193 if (i>lowestNset32bits[18]) {
199 if (i>lowestNset32bits[16]) {
208 if (i>lowestNset32bits[7]) {
209 if (i>lowestNset32bits[11]) {
210 if (i>lowestNset32bits[13]) {
211 if (i>lowestNset32bits[14]) {
217 if (i>lowestNset32bits[12]) {
224 if (i>lowestNset32bits[9]) {
225 if (i>lowestNset32bits[10]) {
231 if (i>lowestNset32bits[8]) {
239 if (i>lowestNset32bits[3]) {
240 if (i>lowestNset32bits[5]) {
241 if (i>lowestNset32bits[6]) {
247 if (i>lowestNset32bits[4]) {
254 if (i>lowestNset32bits[1]) {
255 if (i>lowestNset32bits[2]) {
261 if (i>lowestNset32bits[0]) {
278 static inline unsigned int bit_size(
unsigned int u) {
279 for (
int bs=1; bs<=32; bs++)
280 if (u == (u&lowestNset32bits[bs]))
282 throw "Bit size (unsigned int) fails!";
286 #endif // #ifdef SLIM_BITSTREAM_H
int32_t readbits_int(int nbits)
Read data from the buffer as (signed) ints.
Definition: bitstream.cpp:501
Byte_t * beyondbuffer
Pointer just beyond buffer (convenience).
Definition: bitstream.h:58
virtual void close()
Close the output stream by flushing and closing the FILE *.
Definition: bitstream.cpp:188
static const int Bits_per_word
Bits per buffer word.
Definition: bitstream.h:52
Definition: bitstream.h:33
virtual int get_bytes_used()
Return the number of bytes used so far in this stream.
Definition: bitstream.cpp:399
size_t bufsize
Size of I/O buffer (bytes)
Definition: bitstream.h:54
FILE * fp
The I/O stream.
Definition: bitstream.h:56
void writeword(const T data)
Write all the bits of a word.
Definition: bitstream.cpp:261
Word_t read_unary()
Read a single unary-coded value.
Definition: bitstream.cpp:516
Word_t * Dptr
Pointer to the current word (as Word_t *).
Definition: bitstream.h:61
int bitptr
Pointer to the current bits.
Definition: bitstream.h:63
Word_t readbits(int nbits)
Read data from the buffer as unsigned ints.
Definition: bitstream.cpp:442
virtual void setupstream()
Allocate a buffer and set up all pointers.
Definition: bitstream.cpp:119
void setupstream()
Allocate a buffer and set up all pointers, then fill buffer.
Definition: bitstream.cpp:407
void flush(bool flush_trailing_bits)
Flush the write buffer and reset for more data.
Definition: bitstream.cpp:328
Definition: bitstream.h:97
bool is_open() const
Is the IO file closed?
Definition: bitstream.cpp:111
Byte_t * buffer_base
Pointer to the buffer.
Definition: bitstream.h:57
virtual void close()
Close the IO file.
Definition: bitstream.cpp:101
Byte_t * Bptr
Pointer to the current word (as Byte_t *).
Definition: bitstream.h:60
obitstream(FILE *file, int buffersize=DEFAULT_IOBUFFER_SIZE)
Start obitstream using a FILE ptr to an open file.
Definition: bitstream.cpp:160
void writebits(uint32_t data, int nbits)
Write data to the buffer.
Definition: bitstream.cpp:214
void next_word()
Move to next word in buffer, refilling it if needed.
Definition: bitstream.cpp:415
union bitstream::@0 buffptr
Pointer to the current word.
void windup()
Put the current word to the buffer with upper 0 bits as needed.
Definition: bitstream.cpp:429
void windup()
Put the current word to the buffer with upper 0 bits as needed.
Definition: bitstream.cpp:201
void writestring(const char *str, bool write_trailing_null=false)
Write 8-bit character strings to the buffer.
Definition: bitstream.cpp:250
int fill()
Fill the read buffer and reset for more data.
Definition: bitstream.cpp:555
~ibitstream()
Destructor only uses base class destructor.
Definition: bitstream.cpp:377
virtual void print() const
Print buffer contents.
Definition: bitstream.cpp:297
bitstream()
Dummy default constructor.
Definition: bitstream.cpp:46
static unsigned int bit_size(int32_t i)
Find size (on [0,32]) of the smallest # that can hold the integer i.
Definition: bitstream.h:141
void write_unary(unsigned int value)
Write a unary code for the value.
Definition: bitstream.cpp:280
Definition: bitstream.h:74
virtual ~bitstream()
Destructor deletes output buffer, closes file.
Definition: bitstream.cpp:91
size_t buf_used
Definition: bitstream.h:55
virtual int get_bytes_used()
Return the number of bytes used so far in this stream.
Definition: bitstream.cpp:140
ibitstream(FILE *file, int buffersize=DEFAULT_IOBUFFER_SIZE)
Start ibitstream using a FILE ptr to an open file.
Definition: bitstream.cpp:357
bitstream & operator=(const bitstream &b)
Assignment operator.
Definition: bitstream.cpp:79
int readstring(char *s, int count=-1)
Read a null-terminated string of 8-bit characters from the bit stream.
Definition: bitstream.cpp:484
virtual void print() const
Print buffer contents.
Definition: bitstream.cpp:530
int get_bitptr()
Get the position of the bitptr.
Definition: bitstream.cpp:148