BitUtil: c/c++ header
This commit is contained in:
38
bitutil.h
38
bitutil.h
@ -154,8 +154,8 @@ static inline uint64_t zigzagdec64(uint64_t x) { return x >> 1 ^ -(x
|
|||||||
#define BITZERO32( _out_, _n_, _start_) BITFORSET_(_out_, _n_, _start_, 0)
|
#define BITZERO32( _out_, _n_, _start_) BITFORSET_(_out_, _n_, _start_, 0)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define DELTR( _in_, _n_, _mode_, _out_) { unsigned _v; for( _out_[0]=_in_[0],_v = 1; _v < _n_; _v++) _out_[_v] = (_in_[_v] - _out_[0]) - _v*_mode_; }
|
#define DELTR( _in_, _n_, _start_, _inc_, _out_) { unsigned _v; for( _v = 0; _v < _n_; _v++) _out_[_v] = _in_[_v] - (_start_) - _v*(_inc_) - (_inc_); }
|
||||||
#define DELTRB(_in_, _n_, _mode_, _b_, _out_) { unsigned _v; for(_b_=0,_out_[0]=_in_[0],_v = 1; _v < _n_; _v++) _out_[_v] = (_in_[_v] - _out_[0]) - _v*_mode_, _b_ |= _out_[_v]; _b_ = bsr32(_b_); }
|
#define DELTRB(_in_, _n_, _start_, _inc_, _b_, _out_) { unsigned _v; for(_b_=0,_v = 0; _v < _n_; _v++) _out_[_v] = _in_[_v] - (_start_) - _v*(_inc_) - (_inc_), _b_ |= _out_[_v]; _b_ = bsr32(_b_); }
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
@ -187,27 +187,29 @@ unsigned bitdelta32(uint32_t *in, unsigned n, uint32_t *out, uint32_t start, uns
|
|||||||
unsigned bitdelta64(uint64_t *in, unsigned n, uint64_t *out, uint64_t start, unsigned inc);
|
unsigned bitdelta64(uint64_t *in, unsigned n, uint64_t *out, uint64_t start, unsigned inc);
|
||||||
|
|
||||||
//-- in-place reverse delta transform
|
//-- in-place reverse delta transform
|
||||||
void bitund8( uint8_t *p, unsigned n, uint8_t start); // non decreasing
|
void bitund8( uint8_t *p, unsigned n, uint8_t start); // non decreasing
|
||||||
void bitund16( uint16_t *p, unsigned n, uint16_t start);
|
void bitund16( uint16_t *p, unsigned n, uint16_t start);
|
||||||
void bitund32( uint32_t *p, unsigned n, uint32_t start);
|
void bitund32( uint32_t *p, unsigned n, uint32_t start);
|
||||||
void bitund64( uint64_t *p, unsigned n, uint64_t start);
|
void bitund64( uint64_t *p, unsigned n, uint64_t start);
|
||||||
|
|
||||||
void bitund18( uint8_t *p, unsigned n, uint8_t start); // non strictly decreasing
|
void bitund18( uint8_t *p, unsigned n, uint8_t start); // non strictly decreasing
|
||||||
void bitund116( uint16_t *p, unsigned n, uint16_t start);
|
void bitund116( uint16_t *p, unsigned n, uint16_t start);
|
||||||
void bitund132( uint32_t *p, unsigned n, uint32_t start);
|
void bitund132( uint32_t *p, unsigned n, uint32_t start);
|
||||||
void bitund164( uint64_t *p, unsigned n, uint64_t start);
|
void bitund164( uint64_t *p, unsigned n, uint64_t start);
|
||||||
|
|
||||||
void bitundn8( uint8_t *p, unsigned n, uint8_t start, uint8_t inc); // increment
|
void bitundn8( uint8_t *p, unsigned n, uint8_t start, uint8_t inc); // increment
|
||||||
void bitundn16( uint16_t *p, unsigned n, uint16_t start, uint16_t inc);
|
void bitundn16( uint16_t *p, unsigned n, uint16_t start, uint16_t inc);
|
||||||
void bitundn32( uint32_t *p, unsigned n, uint32_t start, uint32_t inc);
|
void bitundn32( uint32_t *p, unsigned n, uint32_t start, uint32_t inc);
|
||||||
void bitundn64( uint64_t *p, unsigned n, uint64_t start, uint64_t inc);
|
void bitundn64( uint64_t *p, unsigned n, uint64_t start, uint64_t inc);
|
||||||
|
|
||||||
//------------- FOR array bit length: out[i] = in[i] - start -------------------------------------
|
//------------- FOR array bit length: out[i] = in[i] - start -------------------------------------
|
||||||
unsigned bitf32( uint32_t *in, unsigned n, uint32_t start); // sorted
|
unsigned bitf32( uint32_t *in, unsigned n, uint32_t start); // sorted
|
||||||
unsigned bitf132( uint32_t *in, unsigned n, uint32_t start);
|
unsigned bitf132( uint32_t *in, unsigned n, uint32_t start);
|
||||||
|
|
||||||
unsigned bitfm32( uint32_t *in, unsigned n, uint32_t *pmin); // unsorted
|
unsigned bitfm8( uint8_t *in, unsigned n, uint8_t *pmin); // unsorted
|
||||||
unsigned bitf1m32( uint32_t *in, unsigned n, uint32_t *pmin);
|
unsigned bitfm16( uint16_t *in, unsigned n, uint16_t *pmin);
|
||||||
|
unsigned bitfm32( uint32_t *in, unsigned n, uint32_t *pmin);
|
||||||
|
unsigned bitfm64( uint64_t *in, unsigned n, uint64_t *pmin);
|
||||||
|
|
||||||
//------------- Zigzag encoding for unsorted integer lists: out[i] = in[i] - in[i-1] -------------
|
//------------- Zigzag encoding for unsorted integer lists: out[i] = in[i] - in[i-1] -------------
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user