5#ifndef __RADRR_CORE2H__
10#define rfmerge3(name,add) name##add
11#define rfmerge2(name,add) rfmerge3(name,add)
12#define rfmerge(name) rfmerge2(name,WRAP_PUBLICS)
13#define VarBitsCopy rfmerge(VarBitsCopy)
14#define VarBitsLens rfmerge(VarBitsLens)
36#define BITSTYPEBYTES 8
37#define BITSTOPMASK (1UL64<<(BITSTYPELEN-1))
40#define VarBitsOpen(vb,pointer) { (vb).init=pointer; if (((U32)pointer)&4) { (vb).bits = *((U32* RADRESTRICT )pointer); (vb).cur = ((char*)pointer)+4; (vb).bitlen = 32; } else { (vb).cur=pointer; (vb).bits=(vb).bitlen=0; } }
41#define VarBitsLocalOpen(vb,pointer) { if (((U32)pointer)&4) { vb##bits = *((U32 * RADRESTRICT)pointer); vb##cur = ((char*)pointer)+4; vb##bitlen = 32; } else { vb##cur=pointer; vb##bits=vb##bitlen=0; } }
47#define BITSTYPEBYTES 4
48#define BITSTOPMASK (1UL<<(BITSTYPELEN-1))
50#define VarBitsOpen(vb,pointer) { (vb).cur=(vb).init=pointer; (vb).bits=(vb).bitlen=0; }
51#define VarBitsLocalOpen(vb,pointer) { vb##cur=pointer; vb##bits=vb##bitlen=0; }
55#define VARBITSTEMP BITSTYPE
79#define VarBitsPut(vb,val,size) { U32 __s=size; U32 __v=(val)&VarBitsLens[__s]; (vb).bits|=__v<<((vb).bitlen); (vb).bitlen+=__s; if ((vb).bitlen>=32) { *((U32*)(vb).cur)=(vb).bits; (vb).cur=((char*)((vb).cur)+4); (vb).bitlen-=32; (vb).bits=0; if ((vb).bitlen) { (vb).bits=__v>>(__s-(vb).bitlen); } } }
80#define VarBitsPut1(vb,boolean) { if (boolean) (vb).bits|=(1<<(vb).bitlen); if ((++(vb).bitlen)==32) { *((U32*)(vb).cur)=(vb).bits; (vb).cur=((char*)((vb).cur)+4); (vb).bits=(vb).bitlen=0; } }
81#define VarBitsPuta1(vb) { (vb).bits|=(1<<(vb).bitlen); if ((++(vb).bitlen)==32) { *((U32*)(vb).cur)=(vb).bits; (vb).cur=((char*)((vb).cur)+4); (vb).bits=(vb).bitlen=0; } }
82#define VarBitsPuta0(vb) { if ((++(vb).bitlen)==32) { *((U32*)(vb).cur)=(vb).bits; (vb).cur=((char*)((vb).cur)+4); (vb).bits=(vb).bitlen=0; } }
83#define VarBitsPutAlign(vb) { U32 __s2=(32-(vb).bitlen)&31; if (__s2) { VarBitsPut((vb),0,__s2); } }
84#define VarBitsFlushtoMemOnly(vb) { if (((vb).bitlen)) { *((U32*)(vb).cur)=(vb).bits; } }
85#define VarBitsConvertPutToGet(gvb,pvb) { if (((pvb).bitlen)) { (gvb).bits=(*((U32*)(pvb).cur))>>(pvb).bitlen; (gvb).bitlen=BITSTYPELEN-(pvb).bitlen; (gvb).cur=((char*)((pvb).cur)+4); } else { (gvb).bits=0; (gvb).bitlen=0; (gvb).cur=(pvb).cur; } (gvb).init=(pvb).init; }
86#define VarBitsFlush(vb) VarBitsPutAlign(vb)
87#define VarBitsSize(vb) ((U32)( (((char*)(vb).cur)-((char*)(vb).init))*8 +(vb).bitlen ))
103#define getbitlevelconst(level) \
115 (((level)< 1024)?10: \
116 (((level)< 2048)?11: \
117 (((level)< 4096)?12: \
118 (((level)< 8192)?13: \
119 (((level)<16384)?14: \
120 (((level)<32768)?15: \
121 (((level)<65536)?16:sizeof(char[65535-level]) \
126#if defined(__RADPPC__)
128 #if defined(__GNUC__)
131 #define count_leading_zeros(count, x) count = __cntlzw(x)
132 #elif defined(__ghs__)
134 #define count_leading_zeros(count, x) count = __CLZ32(x)
136 #define count_leading_zeros(count, x) \
137 __asm__ ("{cntlz|cntlzw} %0,%1" \
152 #include <ppcintrinsics.h>
153 #define __cntlzw _CountLeadingZeros
156 #define getbitlevelvar(n) (U32) (32 - __cntlzw(n))
160#elif defined(__RADSPU__)
170#elif defined(__RADARM__)
176 #define getbitlevelvar(n) (U32) (32 - _CountLeadingZeros(n))
180 #define getbitlevelvar(n) (U32) (32 - _arm_clz(n))
186 #define getbitlevelvar(n) (U32) (32 - __builtin_clz(n))
190#elif (_MSC_FULL_VER >= 13012035 )
194 #pragma intrinsic(_BitScanReverse)
212 static char vs[16]={0,1,2,2,3,3,3,3,4,4,4,4,4,4,4,4};
215 if ( val & 0xffff0000 )
240#define VarBitsGetAlign(vb) { (vb).bitlen=0; }
241#define VarBitsPos(vb) ((U32)( (((U8*)(vb).cur)-((U8*)(vb).init))*8-(vb).bitlen ))
246#define GetBitsLen(val) (((U32)0xffffffff)>>(U32)(32-(val)))
254#define VarBitsGet1(vb,i) \
258 i=*((BITSTYPE* RADRESTRICT)((vb).cur)), \
259 ((vb).cur)=((char*)((vb).cur))+BITSTYPEBYTES, \
260 ((vb).bits)=((BITSTYPE)i)>>1, \
261 ((vb).bitlen)=(BITSTYPELEN-1) \
270#define VarBitsGet1LE(vb,i) \
274 i=radloadu32ptr((vb).cur), \
275 ((vb).cur)=((char*)((vb).cur))+4, \
276 ((vb).bits)=((U32)i)>>1, \
286#define VarBitsGet(v,typ,vb,len) \
288 if (((vb).bitlen)<(len)) { \
289 register BITSTYPE nb=*((BITSTYPE* RADRESTRICT)((vb).cur)); \
290 v=(typ)((((vb).bits)|(nb<<((vb).bitlen)))&GetBitsLen(len)); \
291 ((vb).bits)=nb>>((len)-((vb).bitlen)); \
292 ((vb).bitlen)=((vb).bitlen)+BITSTYPELEN-(len); \
293 ((vb).cur)=((char*)((vb).cur))+BITSTYPEBYTES; \
295 v=(typ)(((vb).bits)&GetBitsLen(len)); \
296 ((vb).bits)>>=(len); \
297 ((vb).bitlen)-=(len); \
301#define VarBitsGetWithCheck(v,typ,vb,len,endp,dowhat) \
303 if (((vb).bitlen)<(len)) { \
304 register BITSTYPE nb; \
305 if ( ( (U8*)((vb).cur) ) >= ( (U8*) (endp) ) ) dowhat \
306 nb=*((BITSTYPE* RADRESTRICT)((vb).cur)); \
307 v=(typ)((((vb).bits)|(nb<<((vb).bitlen)))&GetBitsLen(len)); \
308 ((vb).bits)=nb>>((len)-((vb).bitlen)); \
309 ((vb).bitlen)=((vb).bitlen)+BITSTYPELEN-(len); \
310 ((vb).cur)=((char*)((vb).cur))+BITSTYPEBYTES; \
312 v=(typ)(((vb).bits)&GetBitsLen(len)); \
313 ((vb).bits)>>=(len); \
314 ((vb).bitlen)-=(len); \
318#define VarBitsGetWithCheckBE(v,typ,vb,len,endp,dowhat) \
320 if (((vb).bitlen)<(len)) { \
321 register BITSTYPE nb; \
322 if ( ( (U8*)((vb).cur) ) >= ( (U8*) (endp) ) ) dowhat \
323 nb=radloadu32ptrBE((vb).cur); \
324 v=(typ)((((vb).bits)|(nb<<((vb).bitlen)))&GetBitsLen(len)); \
325 ((vb).bits)=nb>>((len)-((vb).bitlen)); \
326 ((vb).bitlen)=((vb).bitlen)+BITSTYPELEN-(len); \
327 ((vb).cur)=((char*)((vb).cur))+BITSTYPEBYTES; \
329 v=(typ)(((vb).bits)&GetBitsLen(len)); \
330 ((vb).bits)>>=(len); \
331 ((vb).bitlen)-=(len); \
335#define VarBitsGetWithCheckLE(v,typ,vb,len,endp,dowhat) \
337 if (((vb).bitlen)<(len)) { \
338 register BITSTYPE nb; \
339 if ( ( (U8*)((vb).cur) ) >= ( (U8*) (endp) ) ) dowhat \
340 nb=radloadu32ptr((vb).cur); \
341 v=(typ)((((vb).bits)|(nb<<((vb).bitlen)))&GetBitsLen(len)); \
342 ((vb).bits)=nb>>((len)-((vb).bitlen)); \
343 ((vb).bitlen)=((vb).bitlen)+BITSTYPELEN-(len); \
344 ((vb).cur)=((char*)((vb).cur))+BITSTYPEBYTES; \
346 v=(typ)(((vb).bits)&GetBitsLen(len)); \
347 ((vb).bits)>>=(len); \
348 ((vb).bitlen)-=(len); \
353#define VarBitsPeek(v,typ,vb,len) \
355 if (((vb).bitlen)<(len)) { \
356 register BITSTYPE nb=*((BITSTYPE* RADRESTRICT)((vb).cur)); \
357 v=(typ)((((vb).bits)|(nb<<((vb).bitlen)))&GetBitsLen(len)); \
359 v=(typ)(((vb).bits)&GetBitsLen(len)); \
364#define VarBitsGetLE(v,typ,vb,len) \
366 if (((vb).bitlen)<(len)) { \
367 register U32 nb=radloadu32ptr((vb).cur); \
368 v=(typ)((((vb).bits)|(nb<<((vb).bitlen)))&GetBitsLen(len)); \
369 ((vb).bits)=nb>>((len)-((vb).bitlen)); \
370 ((vb).bitlen)=((vb).bitlen)+32-(len); \
371 ((vb).cur)=((char*)((vb).cur))+4; \
373 v=(typ)(((vb).bits)&GetBitsLen(len)); \
374 ((vb).bits)>>=(len); \
375 ((vb).bitlen)-=(len); \
380#define VarBitsUse(vb,len) \
382 if (((vb).bitlen)<(len)) { \
383 register BITSTYPE nb=*((BITSTYPE* RADRESTRICT)((vb).cur)); \
384 ((vb).bits)=nb>>((len)-((vb).bitlen)); \
385 ((vb).bitlen)=((vb).bitlen)+BITSTYPELEN-(len); \
386 ((vb).cur)=((char*)((vb).cur))+BITSTYPEBYTES; \
388 ((vb).bits)>>=(len); \
389 ((vb).bitlen)-=(len); \
400#define VARBITSLOCAL(name) void * name##cur; BITSTYPE name##bits; U32 name##bitlen
407#if defined(__RADX86__)
408#include <xmmintrin.h>
409#define VBPREFETCH( ptr ) _mm_prefetch(((char*)(ptr))+1024, _MM_HINT_T0 )
410#elif defined(__RADARM64__)
412#define VBPREFETCH( ptr ) __builtin_prefetch(((char*)(ptr))+1024)
414#define VBPREFETCH( ptr )
417#define VBPREFETCH( ptr )
420#define VarBitsLocalGet(v,typ,vb,len) \
422 register U64 _bits = (vb##bits); \
423 if ((vb##bitlen)<len) { \
424 _bits |= (((U64)(*((U32* RADRESTRICT)(vb##cur))))<<(vb##bitlen)); \
425 (vb##bitlen)=(vb##bitlen)+32; \
426 VBPREFETCH((vb##cur)); \
427 (vb##cur)=((char*)(vb##cur))+4; \
429 (vb##bits)=(U32)(_bits>>(len)); \
430 (vb##bitlen)-=(len); \
431 v=(typ)(((U32)_bits)&GetBitsLen(len)); \
436#define VarBitsLocalGetWithCheckBase(v,typ,vb,len,mask,endp,dowhat,load) \
438 register U64 _bits = (vb##bits); \
439 if ((vb##bitlen)<len) { \
440 if ( ( (U8*)(vb##cur) ) >= ( (U8*) (endp) ) ) dowhat \
441 _bits|=((U64) (load(vb##cur))) << (vb##bitlen); \
443 (vb##cur)=((char*)(vb##cur))+4; \
445 v=(typ)(_bits & (mask)); \
446 (vb##bits)=(U32)(_bits>>(len)); \
447 (vb##bitlen)-=(len); \
452#define VarBitsLocalGet(v,typ,vb,len) \
454 if ((vb##bitlen)<len) { \
455 register BITSTYPE nb=*((BITSTYPE* RADRESTRICT)(vb##cur)); \
456 v=(typ)(((vb##bits)|(nb<<(vb##bitlen)))&GetBitsLen(len)); \
457 (vb##bits)=nb>>((len)-(vb##bitlen)); \
458 (vb##bitlen)=(vb##bitlen)+BITSTYPELEN-(len); \
459 (vb##cur)=((char*)(vb##cur))+BITSTYPEBYTES; \
461 v=(typ)((vb##bits)&GetBitsLen(len)); \
462 (vb##bits)>>=(len); \
463 (vb##bitlen)-=(len); \
469#define VarBitsLocalGetWithCheckBase(v,typ,vb,len,mask,endp,dowhat,load) \
471 if ((vb##bitlen)<len) { \
472 register BITSTYPE nb; \
473 if ( ( (U8*)(vb##cur) ) >= ( (U8*) (endp) ) ) dowhat \
475 v=(typ)(((vb##bits)|(nb<<(vb##bitlen)))&(mask)); \
476 (vb##bits)=nb>>((len)-(vb##bitlen)); \
477 (vb##bitlen)=(vb##bitlen)+BITSTYPELEN-(len); \
478 (vb##cur)=((char*)(vb##cur))+BITSTYPEBYTES; \
480 v=(typ)((vb##bits)&(mask)); \
481 (vb##bits)>>=(len); \
482 (vb##bitlen)-=(len); \
488#define radloadbitsnative(ptr) (*((BITSTYPE* RADRESTRICT)(ptr)))
490#define VarBitsLocalGetWithCheck(v,typ,vb,len,endp,dowhat) VarBitsLocalGetWithCheckBase(v,typ,vb,len,GetBitsLen(len),endp,dowhat,radloadbitsnative)
491#define VarBitsLocalGetWithCheckBE(v,typ,vb,len,endp,dowhat) VarBitsLocalGetWithCheckBase(v,typ,vb,len,GetBitsLen(len),endp,dowhat,radloadu32ptrBE)
492#define VarBitsLocalGetWithCheckLE(v,typ,vb,len,endp,dowhat) VarBitsLocalGetWithCheckBase(v,typ,vb,len,GetBitsLen(len),endp,dowhat,radloadu32ptr)
495#define VarBitsLocalGetWithCheckM(v,typ,vb,len,mask,endp,dowhat) VarBitsLocalGetWithCheckBase(v,typ,vb,len,mask,endp,dowhat,radloadbitsnative)
496#define VarBitsLocalGetWithCheckMBE(v,typ,vb,len,mask,endp,dowhat) VarBitsLocalGetWithCheckBase(v,typ,vb,len,mask,endp,dowhat,radloadu32ptrBE)
497#define VarBitsLocalGetWithCheckMLE(v,typ,vb,len,mask,endp,dowhat) VarBitsLocalGetWithCheckBase(v,typ,vb,len,mask,endp,dowhat,radloadu32ptr)
501#define VarBitsLocalFill1WithCheckBase(vb,endp,cond,dowhat,load)\
503 if ((vb##bitlen)==0 && (cond)) { \
504 if ( ( (U8*)(vb##cur) ) >= ( (U8*) (endp) ) ) dowhat \
505 (vb##bits)=load(vb##cur); \
506 (vb##cur)=((char*)(vb##cur))+BITSTYPEBYTES; \
507 (vb##bitlen)=(BITSTYPELEN); \
511#define VarBitsLocalGet1WithCheckBase(v,vb,endp,dowhat,load) \
513 VarBitsLocalFill1WithCheckBase(vb,endp,1,dowhat,load) \
520#define VarBitsLocalFill1WithCheck(vb,endp,cond,dowhat) VarBitsLocalFill1WithCheckBase(vb,endp,cond,dowhat,radloadbitsnative)
521#define VarBitsLocalFill1WithCheckBE(vb,endp,cond,dowhat) VarBitsLocalFill1WithCheckBase(vb,endp,cond,dowhat,radloadu32ptrBE)
522#define VarBitsLocalFill1WithCheckLE(vb,endp,cond,dowhat) VarBitsLocalFill1WithCheckBase(vb,endp,cond,dowhat,radloadu32ptr)
524#define VarBitsLocalGet1WithCheck(v,vb,endp,dowhat) VarBitsLocalGet1WithCheckBase(v,vb,endp,dowhat,radloadbitsnative)
525#define VarBitsLocalGet1WithCheckBE(v,vb,endp,dowhat) VarBitsLocalGet1WithCheckBase(v,vb,endp,dowhat,radloadu32ptrBE)
526#define VarBitsLocalGet1WithCheckLE(v,vb,endp,dowhat) VarBitsLocalGet1WithCheckBase(v,vb,endp,dowhat,radloadu32ptr)
532#define VarBitsLocalGetIfxSM(v,typ,vb,len,i,x,mask) \
535 i=*((BITSTYPE* RADRESTRICT)(vb##cur)), \
536 (vb##cur)=((char*)(vb##cur))+BITSTYPEBYTES, \
537 ( ( i & 1 ) == x ) ? \
539 v = (typ)( ( i >> 1 ) mask ), \
540 (vb##bits)=((BITSTYPE)i)>>(len+1), \
541 (vb##bitlen)=(BITSTYPELEN - 1 - len), \
544 (vb##bits)=(((BITSTYPE)i)>>1), \
545 (vb##bitlen)=(BITSTYPELEN-1), \
550 ( ( (vb##bits) & 1 ) == x ) ? \
552 ( ( vb##bitlen ) < len )? \
554 i=*((BITSTYPE* RADRESTRICT)(vb##cur)), \
555 (vb##cur)=(((char*)(vb##cur))+BITSTYPEBYTES ), \
556 v=(typ)(((vb##bits>>1)|(i<<vb##bitlen)) mask ), \
557 (vb##bits)=(i>>((len)-vb##bitlen)), \
558 (vb##bitlen)=((vb##bitlen)+BITSTYPELEN-(len)), \
561 v = (typ) ( ( (vb##bits) >> 1 ) mask ), \
562 (vb##bits)>>=(len+1), \
575#define VarBitsLocalGetIfx(v,typ,vb,len,i,x) \
576 VarBitsLocalGetIfxSM(v,typ,vb,len,i,x,&GetBitLen(len))
581#define VarBitsLocalGetIfxNM(v,typ,vb,len,i,x) \
582 VarBitsLocalGetIfxSM(v,typ,vb,len,i,x, )
585#define VarBitsLocalPeek(v,typ,vb,len) \
587 if ((vb##bitlen)<(len)) { \
588 register BITSTYPE nb=*((BITSTYPE* RADRESTRICT)(vb##cur)); \
589 v=(typ)(((vb##bits)|(nb<<(vb##bitlen)))&GetBitsLen(len)); \
591 v=(typ)((vb##bits)&GetBitsLen(len)); \
595#define VarBitsLocalGet1BE(vb,i) \
599 i=radloadu32ptrBE(vb##cur), \
600 (vb##cur)=((char*)(vb##cur))+BITSTYPEBYTES, \
601 (vb##bits)=((BITSTYPE)i)>>1, \
602 (vb##bitlen)=(BITSTYPELEN-1) \
610#define VarBitsLocalGet1LE(vb,i) \
614 i=radloadu32ptr(vb##cur), \
615 (vb##cur)=((char*)(vb##cur))+BITSTYPEBYTES, \
616 (vb##bits)=((BITSTYPE)i)>>1, \
617 (vb##bitlen)=(BITSTYPELEN-1) \
627#define VarBitsLocalMaskFromMaskAndUse1(omask,vb,imask) \
630 (vb##bits)=*((BITSTYPE* RADRESTRICT)(vb##cur)); \
631 (vb##bitlen)=BITSTYPELEN; \
632 (vb##cur)=((char*)(vb##cur))+BITSTYPEBYTES; \
634 (vb##bitlen)+=imask; \
635 omask=(((S32)(vb##bits)<<31)>>31)&imask; \
636 (vb##bits)=((vb##bits>>1)&imask)|(vb##bits&~imask); \
640#define VarBitsLocalGet1(vb,i) \
644 (vb##bits)=*((BITSTYPE* RADRESTRICT)(vb##cur)), \
645 (vb##cur)=((char*)(vb##cur))+4, \
657#define VarBitsLocalGet1(vb,i) \
661 i=*((BITSTYPE* RADRESTRICT)(vb##cur)), \
662 (vb##cur)=((char*)(vb##cur))+BITSTYPEBYTES, \
663 (vb##bits)=((BITSTYPE)i)>>1, \
664 (vb##bitlen)=(BITSTYPELEN-1) \
674#define VarBitsLocalUse(vb,len) \
676 if ((vb##bitlen)<(len)) { \
677 register BITSTYPE nb=*((BITSTYPE* RADRESTRICT)(vb##cur)); \
678 (vb##bits)=nb>>((len)-(vb##bitlen)); \
679 (vb##bitlen)=(vb##bitlen)+BITSTYPELEN-(len); \
680 (vb##cur)=((char*)(vb##cur))+BITSTYPEBYTES; \
682 (vb##bits)>>=(len); \
683 (vb##bitlen)-=(len); \
687#define VarBitsLocalPos(vb,origvb) ((U32)( (((char*)vb##cur)-((char*)(origvb)->init))*8 +(32-vb##bitlen) ))
691#define VarBitsCopyToLocal( local, vb ) local##cur = (vb).cur; local##bits = (vb).bits; local##bitlen = (vb).bitlen;
693#define VarBitsCopyFromLocal( vb, local ) (vb).cur = local##cur; (vb).bits = local##bits; (vb).bitlen = local##bitlen;
699#define CLASSIFY_SIGN( val ) ( (((U32)((S32)(val))) >> 31 ) + ((((U32)(-(S32)(val))) >> 30 ) & 2 ) )
716#define VarBitsBPutOpen(vb,ptr) { (vb).cur=(vb).init=(void *)(ptr); (vb).bits=(vb).bitlen=0; (vb).isPut = 1; }
717#define VarBitsBGetOpen(vb,ptr) { (vb).cur=(vb).init=(void *)(ptr); (vb).bits=(vb).bitlen=0; (vb).isPut = 0; }
720#define VarBitsBPut(vb,val,size) do { U32 __s=size; U32 __v=(val); \
721 radassert( __v < (1UL<<__s) ); \
722if ((vb).bitlen+__s >=BITSTYPELEN) { U32 __r = __s + (vb).bitlen - BITSTYPELEN; \
723 (vb).bits <<= (BITSTYPELEN-(vb).bitlen); (vb).bits |= __v >> __r; \
724 *((U32*)(vb).cur)=(vb).bits; (vb).cur=((char*)((vb).cur)+4); \
725(vb).bitlen = __r; (vb).bits = __v&VarBitsLens[__r]; } \
726else { (vb).bits = ((vb).bits<<__s) | __v; (vb).bitlen+=__s; } } while(0)
728#define VarBitsBPuta1(vb) { (vb).bits = (vb).bits + (vb).bits + 1; if ((++(vb).bitlen)==BITSTYPELEN) { *((U32*)(vb).cur)=(vb).bits; (vb).cur=((char*)((vb).cur)+4); (vb).bits=(vb).bitlen=0; } }
729#define VarBitsBPuta0(vb) { (vb).bits <<= 1; if ((++(vb).bitlen)==BITSTYPELEN) { *((U32*)(vb).cur)=(vb).bits; (vb).cur=((char*)((vb).cur)+4); (vb).bits=(vb).bitlen=0; } }
730#define VarBitsBPut1(vb,bit) { (vb).bits = (vb).bits + (vb).bits + ((bit)?1:0); if ((++(vb).bitlen)==BITSTYPELEN) { *((U32*)(vb).cur)=(vb).bits; (vb).cur=((char*)((vb).cur)+4); (vb).bits=(vb).bitlen=0; } }
732#define VarBitsBPutAlign(vb) { U32 __s2=(32-(vb).bitlen)&31; if (__s2) { VarBitsBPut((vb),0,__s2); } }
733#define VarBitsBPutFlush(vb) VarBitsBPutAlign(vb)
734#define VarBitsBGetAlign(vb) { (vb).bitlen=0; }
735#define VarBitsBPutSize(vb) ((U32)( (((char*)(vb).cur)-((char*)(vb).init))*8 +(vb).bitlen ))
736#define VarBitsBGetSize(vb) ((U32)( (((char*)(vb).cur)-((char*)(vb).init))*8 -(vb).bitlen ))
740#define VarBitsBGet(v,typ,vb,len) \
742 if (((vb).bitlen)<(len)) { \
743 register BITSTYPE nb=*((BITSTYPE* RADRESTRICT)((vb).cur)); \
744 v=(typ)((((vb).bits)|(nb>>((vb).bitlen)))>>(BITSTYPELEN-len));\
745 ((vb).bits)=nb<<((len)-((vb).bitlen)); \
746 ((vb).bitlen)=((vb).bitlen)+BITSTYPELEN-(len); \
747 ((vb).cur)=((char*)((vb).cur))+BITSTYPEBYTES; \
749 v=(typ)(((vb).bits)>>(BITSTYPELEN-len)); \
750 ((vb).bits)<<=(len); \
751 ((vb).bitlen)-=(len); \
752 v &= (len)?0xffffffff:0; \
756#define VarBitsBPeek(v,typ,vb,len) \
758 if (((vb).bitlen)<(len)) { \
759 register BITSTYPE nb=*((BITSTYPE* RADRESTRICT)((vb).cur)); \
760 v=(typ)((((vb).bits)|(nb>>((vb).bitlen)))>>(BITSTYPELEN-len));\
762 v=(typ)(((vb).bits)>>(BITSTYPELEN-len)); \
766#define VarBitsBUse(vb,len) \
768 if (((vb).bitlen)<(len)) { \
769 register BITSTYPE nb=*((BITSTYPE* RADRESTRICT)((vb).cur)); \
770 ((vb).bits)=nb<<((len)-((vb).bitlen)); \
771 ((vb).bitlen)=((vb).bitlen)+BITSTYPELEN-(len); \
772 ((vb).cur)=((char*)((vb).cur))+BITSTYPEBYTES; \
774 ((vb).bits)<<=(len); \
775 ((vb).bitlen)-=(len); \
784#define VarBitsBGet1(vb,temp_u32) \
788 temp_u32=*((BITSTYPE* RADRESTRICT)((vb).cur)),\
789 ((vb).cur)=((char*)((vb).cur))+BITSTYPEBYTES, \
790 ((vb).bits)=((BITSTYPE)temp_u32)<<1, \
791 ((vb).bitlen)=(BITSTYPELEN-1) \
793 temp_u32=((vb).bits), \
797 (temp_u32>>(BITSTYPELEN-1)) \
811 if ( (
int)((
vb).bitlen) < (len))
815 ((
vb).bits)=
nb<<((len)-((
vb).bitlen));
825 ((
vb).bitlen)-=(len);
831#define VarBitsBGet(v,typ,vb,len) _VarBitsBGet((U32 &)v,vb,len)
851 (
vb).cur=((
char*)((
vb).cur)+4);
864#define VarBitsBPut(vb,val,size) _VarBitsBPut(vb,val,size)
#define RADDEFEND
Definition egttypes.h:68
RAD_U32 U32
Definition egttypes.h:501
#define RADRESTRICT
Definition egttypes.h:282
#define RADDEFSTART
Definition egttypes.h:67
#define RADDEFFUNC
Definition egttypes.h:66
RAD_S32 S32
Definition egttypes.h:496
#define RADINLINE
Definition egttypes.h:387
#define RADDECLAREDATA
Definition rrCore.h:674
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
float shift(float inValue, float expShift)
Definition RenderCore.cpp:859
char * dest
Definition lz4.h:709
float v
Definition radaudio_mdct.cpp:62
U16 Index
Definition radfft.cpp:71
U32 bitlen
Definition varbits.h:711
BITSTYPE bits
Definition varbits.h:709
int isPut
Definition varbits.h:713
void *RADRESTRICT init
Definition varbits.h:712
void *RADRESTRICT cur
Definition varbits.h:710
void *RADRESTRICT end
Definition varbits.h:74
BITSTYPE bits
Definition varbits.h:70
U32 bitlen
Definition varbits.h:72
void *RADRESTRICT init
Definition varbits.h:73
void *RADRESTRICT cur
Definition varbits.h:71
void *RADRESTRICT init
Definition varbits.h:62
void *RADRESTRICT cur
Definition varbits.h:60
BITSTYPE bits
Definition varbits.h:59
U32 bitlen
Definition varbits.h:61
#define BITSTYPE
Definition varbits.h:45
struct _VARBITSEND VARBITSEND
struct _VARBITSB VARBITSB
#define BITSTYPEBYTES
Definition varbits.h:47
RADDECLAREDATA const RAD_ALIGN(U32, VarBitsLens[33], 32)
#define BITSTYPELEN
Definition varbits.h:46
RADDEFFUNC void VarBitsCopy(VARBITS *dest, VARBITS *src, U32 size)
Definition varbits.c:19