29 lines
411 B
C++
29 lines
411 B
C++
|
/* Copyright (C) Teemu Suutari */
|
||
|
|
||
|
#include "Common.hpp"
|
||
|
|
||
|
|
||
|
namespace ancient::internal
|
||
|
{
|
||
|
|
||
|
uint32_t rotateBits(uint32_t value,uint32_t count)
|
||
|
{
|
||
|
static const uint8_t rotateNibble[16]={
|
||
|
0x0,0x8,0x4,0xc,
|
||
|
0x2,0xa,0x6,0xe,
|
||
|
0x1,0x9,0x5,0xd,
|
||
|
0x3,0xb,0x7,0xf
|
||
|
};
|
||
|
|
||
|
uint32_t ret=0;
|
||
|
for (uint32_t i=0;i<count;i+=4)
|
||
|
{
|
||
|
ret=(ret<<4)|rotateNibble[value&0xf];
|
||
|
value>>=4;
|
||
|
}
|
||
|
ret>>=(4-count)&3;
|
||
|
return ret;
|
||
|
}
|
||
|
|
||
|
}
|