ref: c57ac95f174df44f16c7ca72ea195bb338941f12
dir: /libentcode/entcode.c/
#include "entcode.h" void ec_byte_reset(ec_byte_buffer *_b){ _b->ptr=_b->buf; } long ec_byte_bytes(ec_byte_buffer *_b){ return _b->ptr-_b->buf; } unsigned char *ec_byte_get_buffer(ec_byte_buffer *_b){ return _b->buf; } int ec_ilog(ec_uint32 _v){ #if defined(EC_CLZ) return EC_CLZ0-EC_CLZ(_v)&-!!_v; #else /*On a Pentium M, this branchless version tested as the fastest on 1,000,000,000 random 32-bit integers, edging out a similar version with branches, and a 256-entry LUT version.*/ int ret; int m; ret=!!_v; m=!!(_v&0xFFFF0000)<<4; _v>>=m; ret|=m; m=!!(_v&0xFF00)<<3; _v>>=m; ret|=m; m=!!(_v&0xF0)<<2; _v>>=m; ret|=m; m=!!(_v&0xC)<<1; _v>>=m; ret|=m; ret+=!!(_v&0x2); return ret; #endif }