|
|
@ -266,20 +266,6 @@ namespace glm |
|
|
|
int const & Bits |
|
|
|
int const & Bits |
|
|
|
) |
|
|
|
) |
|
|
|
{ |
|
|
|
{ |
|
|
|
/* |
|
|
|
|
|
|
|
GLM_STATIC_ASSERT(std::numeric_limits<genIUType>::is_integer, "'bitfieldExtract' only accept integer values"); |
|
|
|
|
|
|
|
assert(Offset + Bits <= (sizeof(genIUType) << 3)); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
genIUType Result(0); |
|
|
|
|
|
|
|
if(std::numeric_limits<genIUType>::is_signed) |
|
|
|
|
|
|
|
Result |= (genIUType(1) << (sizeof(genIUType) * genIUType(8) - genIUType(1))) & (genIUType(1) << (Offset + Bits - genIUType(1))); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
genIUType Mask(0); |
|
|
|
|
|
|
|
for(int Bit = Offset; Bit < Bits; ++Bit) |
|
|
|
|
|
|
|
Mask |= (genIUType(1) << Bit); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return Result | ((Mask & Value) >> Offset); |
|
|
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
int GenSize = int(sizeof(genIUType)) << int(3); |
|
|
|
int GenSize = int(sizeof(genIUType)) << int(3); |
|
|
|
|
|
|
|
|
|
|
|
assert(Offset + Bits <= GenSize); |
|
|
|
assert(Offset + Bits <= GenSize); |
|
|
@ -350,7 +336,7 @@ namespace glm |
|
|
|
|
|
|
|
|
|
|
|
genIUType Mask = 0; |
|
|
|
genIUType Mask = 0; |
|
|
|
for(int Bit = Offset; Bit < Offset + Bits; ++Bit) |
|
|
|
for(int Bit = Offset; Bit < Offset + Bits; ++Bit) |
|
|
|
Mask |= (genIUType(1) << Bit); |
|
|
|
Mask |= (1 << Bit); |
|
|
|
|
|
|
|
|
|
|
|
return (Base & ~Mask) | (Insert & Mask); |
|
|
|
return (Base & ~Mask) | (Insert & Mask); |
|
|
|
} |
|
|
|
} |
|
|
@ -404,13 +390,14 @@ namespace glm |
|
|
|
template <typename genIUType> |
|
|
|
template <typename genIUType> |
|
|
|
GLM_FUNC_QUALIFIER genIUType bitfieldReverse(genIUType const & Value) |
|
|
|
GLM_FUNC_QUALIFIER genIUType bitfieldReverse(genIUType const & Value) |
|
|
|
{ |
|
|
|
{ |
|
|
|
GLM_STATIC_ASSERT(std::numeric_limits<genIUType>::is_integer, "'bitfieldReverse' only accept integer values"); |
|
|
|
GLM_STATIC_ASSERT(std::numeric_limits<genType>::is_integer, "'bitRevert' only accept integer values"); |
|
|
|
|
|
|
|
|
|
|
|
genIUType Result = 0; |
|
|
|
genIUType Out = 0; |
|
|
|
for(std::size_t i = 0; i < sizeof(genIUType) * std::size_t(8); ++i) |
|
|
|
std::size_t BitSize = sizeof(genIUType) * 8; |
|
|
|
if(Value & (genIUType(1) << genIUType(i))) |
|
|
|
for(std::size_t i = 0; i < BitSize; ++i) |
|
|
|
Result |= (genIUType(1) << (genIUType(sizeof(genIUType)) * genIUType(8)) - genIUType(1) - genIUType(i)); |
|
|
|
if(In & (genIUType(1) << i)) |
|
|
|
return Result; |
|
|
|
Out |= genIUType(1) << (BitSize - 1 - i); |
|
|
|
|
|
|
|
return Out; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
template <typename T> |
|
|
|
template <typename T> |
|
|
@ -458,7 +445,7 @@ namespace glm |
|
|
|
int Count = 0; |
|
|
|
int Count = 0; |
|
|
|
for(std::size_t i = 0; i < sizeof(genIUType) * std::size_t(8); ++i) |
|
|
|
for(std::size_t i = 0; i < sizeof(genIUType) * std::size_t(8); ++i) |
|
|
|
{ |
|
|
|
{ |
|
|
|
if(Value & (genIUType(1) << i)) |
|
|
|
if(Value & (1 << i)) |
|
|
|
++Count; |
|
|
|
++Count; |
|
|
|
} |
|
|
|
} |
|
|
|
return Count; |
|
|
|
return Count; |
|
|
|