BitUtil: Delta, ZigZag, NumBits, Floating Point,...

This commit is contained in:
x
2018-01-06 21:15:51 +01:00
parent 8db5764f92
commit d9d1656f06

View File

@ -221,8 +221,8 @@ unsigned bitf32( uint32_t *in, unsigned n, uint32_t start) { return n?bsr32(in[
unsigned bitf132( uint32_t *in, unsigned n, uint32_t start) { return n?bsr32(in[n-1] - start - n):0; }
//------------------- Zigzag ---------------------------
#define ZE(i,_it_) x = (_it_)_p[i]-(_it_)start; x = (x << 1) ^ (x >> (sizeof(x)*8-1)); start = _p[i]
#define BITZENC(_ut_, _it_, _p_,_n_, _act_) { _ut_ *_p;\
#define ZE(i,_it_) _z = (_it_)_p[i]-(_it_)start; x = (_z << 1) ^ (_z >> (sizeof(_z)*8-1)); start = _p[i]
#define BITZENC(_ut_, _it_, _p_,_n_, _act_) { _ut_ *_p; _it_ _z;\
for(_p = _p_; _p != _p_+(_n_&~(4-1)); _p += 4) { ZE(0,_it_);_act_; ZE(1,_it_);_act_; ZE(2,_it_);_act_; ZE(3,_it_);_act_; }\
for(;_p != _p_+_n_; _p++) { ZE(0,_it_); _act_;}\
}
@ -252,14 +252,14 @@ unsigned bitz32(unsigned *in, unsigned n, unsigned start) {
}
#else
uint32_t b = 0, x;
BITZENC(uint32_t, int32_t, in, n, start, b |= x);
BITZENC(uint32_t, int32_t, in, n, b |= x);
#endif
return bsr32(b);
}
unsigned bitzenc8( uint8_t *in, unsigned n, uint8_t *out, uint8_t start, uint8_t mindelta) { uint8_t b = 0,*op = out,x; BITZENC(uint8_t, int8_t, in, n, b |= x; *op++ = x); return bsr8(b); }
unsigned bitzenc16(uint16_t *in, unsigned n, uint16_t *out, uint16_t start, uint16_t mindelta) { uint16_t b = 0,*op = out,x; BITZENC(uint16_t, int16_t,in, n, b |= x; *op++ = x); return bsr16(b); }
unsigned bitzenc64(uint64_t *in, unsigned n, uint64_t *out, uint64_t start, uint64_t mindelta) { uint64_t b = 0,*op = out,x; BITZENC(uint64_t, int64_t,in, n, b |= x; *op++ = x); return bsr32(b); }
unsigned bitzenc8( uint8_t *in, unsigned n, uint8_t *out, uint8_t start, uint8_t mindelta) { uint8_t b = 0,*op = out;uint8_t x; BITZENC(uint8_t, int8_t, in, n, b |= x; *op++ = x); return bsr8(b); }
unsigned bitzenc16(uint16_t *in, unsigned n, uint16_t *out, uint16_t start, uint16_t mindelta) { uint16_t b = 0,*op = out;uint16_t x; BITZENC(uint16_t, int16_t,in, n, b |= x; *op++ = x); return bsr16(b); }
unsigned bitzenc64(uint64_t *in, unsigned n, uint64_t *out, uint64_t start, uint64_t mindelta) { uint64_t b = 0,*op = out;uint64_t x; BITZENC(uint64_t, int64_t,in, n, b |= x; *op++ = x); return bsr32(b); }
unsigned bitzenc32(unsigned *in, unsigned n, unsigned *out, unsigned start, uint32_t mindelta) {
#ifdef __SSE2__
unsigned *ip,b,*op = out;