forked from BenLangmead/bowtie
-
Notifications
You must be signed in to change notification settings - Fork 0
/
bitpack.h
34 lines (27 loc) · 785 Bytes
/
bitpack.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#ifndef BITPACK_H_
#define BITPACK_H_
#include <stdint.h>
#include "assert_helpers.h"
/**
* Routines for marshalling 2-bit values into and out of 8-bit or
* 32-bit hosts
*/
static inline void pack_2b_in_8b(const int two, uint8_t& eight, const int off) {
assert_lt(two, 4);
assert_lt(off, 4);
eight |= (two << (off*2));
}
static inline int unpack_2b_from_8b(const uint8_t eight, const int off) {
assert_lt(off, 4);
return ((eight >> (off*2)) & 0x3);
}
static inline void pack_2b_in_32b(const int two, uint32_t& thirty2, const int off) {
assert_lt(two, 4);
assert_lt(off, 16);
thirty2 |= (two << (off*2));
}
static inline int unpack_2b_from_32b(const uint32_t thirty2, const int off) {
assert_lt(off, 16);
return ((thirty2 >> (off*2)) & 0x3);
}
#endif /*BITPACK_H_*/