File: bitpack.h

package info (click to toggle)
bowtie 1.1.1-2
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 14,864 kB
  • ctags: 5,533
  • sloc: cpp: 32,737; perl: 2,084; ansic: 1,241; sh: 1,066; makefile: 344; python: 133
file content (34 lines) | stat: -rw-r--r-- 785 bytes parent folder | download | duplicates (7)
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_*/