pflib v3.13.3-1-gf856638
Pretty Fine HGCROC Interaction Library
Loading...
Searching...
No Matches
DecompressAEBM.h
1#pragma once
2#ifndef PFLIB_PACKING_DECODEAEBM_H
3#define PFLIB_PACKING_DECODEAEBM_H
4
5#include "pflib/packing/Mask.h"
6
7namespace pflib::packing {
8
31template <unsigned short A, unsigned short B>
32unsigned long decompressAEBM(unsigned long encoded) {
33 static_assert(A + B < 12); // arbitrary limit to avoid typos
34 unsigned long mantissa = (encoded & mask<B>);
35 unsigned long exponent = ((encoded >> B) & mask<A>);
36 if (exponent == 0) {
37 return mantissa;
38 }
39 unsigned long output = (((1 << B) | mantissa) << (exponent - 1));
40 if (exponent > 1) {
41 output |= (1 << (exponent - 2));
42 }
43 return output;
44}
45
46} // namespace pflib::packing
47
48#endif