File: bitpack.h

package info (click to toggle)
bowtie 1.2.3+dfsg-4
  • links: PTS, VCS
  • area: main
  • in suites: bullseye, sid
  • size: 16,888 kB
  • sloc: cpp: 35,784; perl: 5,903; ansic: 1,247; sh: 1,180; python: 487; makefile: 426
file content (34 lines) | stat: -rw-r--r-- 785 bytes parent folder | download | duplicates (5)
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_*/