add a few more overloads for calculating bitset size (for eth-bloom)

This commit is contained in:
Jacek Sieka 2018-11-07 09:18:25 -06:00
parent 0f53325c08
commit edb1ade373
No known key found for this signature in database
GPG Key ID: 6299FEB3EB6FA465
3 changed files with 18 additions and 14 deletions

View File

@ -16,20 +16,14 @@ type
UInt128* = StUint[128]
UInt256* = StUint[256]
template make_conv(conv_name: untyped, size: int): untyped =
func `convname`*(n: SomeInteger): StUint[size] {.inline.}=
n.stuint(size)
func `convname`*(input: string): StUint[size] {.inline.}=
input.parse(Stuint[size])
func u128*(n: SomeInteger): UInt128 {.inline.} = n.stuint(128)
func u128*(s: string): UInt128 {.inline.} = s.parse(UInt128)
make_conv(u128, 128)
make_conv(u256, 256)
func u256*(n: SomeInteger): UInt256 {.inline.} = n.stuint(256)
func u256*(s: string): UInt256 {.inline.} = s.parse(UInt256)
template make_conv(conv_name: untyped, size: int): untyped =
func `convname`*(n: SomeInteger): Stint[size] {.inline.}=
n.stint(size)
func `convname`*(input: string): Stint[size] {.inline.}=
input.parse(Stint[size])
func i128*(n: SomeInteger): Int128 {.inline.} = n.stint(128)
func i128*(s: string): Int128 {.inline.} = s.parse(Int128)
make_conv(i128, 128)
make_conv(i256, 256)
func i256*(n: SomeInteger): Int256 {.inline.} = n.stint(256)
func i256*(s: string): Int256 {.inline.} = s.parse(Int256)

View File

@ -175,6 +175,10 @@ template bitsof*(x: UintImpl[UintImpl[UintImpl[SomeInteger]]]): untyped =
2 * bitsof(x.lo)
template bitsof*(x: UintImpl[UintImpl[UintImpl[UintImpl[SomeInteger]]]]): untyped =
2 * bitsof(x.lo)
template bitsof*(x: UintImpl[UintImpl[UintImpl[UintImpl[UintImpl[SomeInteger]]]]]): untyped =
2 * bitsof(x.lo)
template bitsof*(x: UintImpl[UintImpl[UintImpl[UintImpl[UintImpl[UintImpl[SomeInteger]]]]]]): untyped =
2 * bitsof(x.lo)
template applyHiLo*(a: UintImpl | IntImpl, c: untyped): untyped =
## Apply `c` to each of `hi` and `lo`

View File

@ -52,3 +52,9 @@ suite "Testing unsigned int bitwise operations":
test "Shift right - by half the size of the integer":
check: cast[uint16](b) == z # Sanity check
check: cast[uint16](b shr 8) == z shr 8
test "leading zero bits":
var x: StUint[2048]
check: x.countLeadingZeroBits() == 2048
x = StUint[2048].one()
check: x.countLeadingZeroBits() == 2047