typetraits: add toSigned, toUnsigned (#18445)

* typetraits: add toSigned, toUnsigned

* improve and add tests

Co-authored-by: Andreas Rumpf <rumpf_a@web.de>
Co-authored-by: flywind <xzsflywind@gmail.com>
This commit is contained in:
Timothee Cour
2022-04-07 14:38:01 -07:00
committed by GitHub
parent 1807de38e5
commit e78ef57c93
7 changed files with 85 additions and 33 deletions

View File

@@ -9,8 +9,7 @@
## Contains the used algorithms for counting bits.
from std/private/bitops_utils import forwardImpl, toUnsigned
from std/private/bitops_utils import forwardImpl, castToUnsigned
const useBuiltins* = not defined(noIntrinsicsBitOpts)
const noUndefined* = defined(noUndefinedBitOpts)
@@ -65,8 +64,7 @@ func countSetBitsImpl*(x: SomeInteger): int {.inline.} =
## Counts the set bits in an integer (also called `Hamming weight`:idx:).
# TODO: figure out if ICC support _popcnt32/_popcnt64 on platform without POPCNT.
# like GCC and MSVC
when x is SomeSignedInt:
let x = x.toUnsigned
let x = x.castToUnsigned
when nimvm:
result = forwardImpl(countBitsImpl, x)
else: