Allow constant time booleans init from constant time uints

This commit is contained in:
Mamy André-Ratsimbazafy 2019-04-29 23:17:56 +02:00
parent cadd81b978
commit c4b3d49e69
No known key found for this signature in database
GPG Key ID: 7B88AD1FE79492E1

View File

@ -15,11 +15,17 @@ type
## by conditional branches, we don't use booleans.
## We use an int to prevent compiler "optimization" and introduction of branches
func ctrue*(T: typedesc[BaseUint]): auto {.inline.}=
(CTBool[Ct[T]])(true)
func ctrue*(T: typedesc[Ct or BaseUint]): auto {.inline.}=
when T is Ct:
(CTBool[T])(true)
else:
(CTBool[Ct[T]])(true)
func cfalse*(T: typedesc[BaseUint]): auto {.inline.}=
(CTBool[Ct[T]])(false)
func cfalse*(T: typedesc[Ct or BaseUint]): auto {.inline.}=
when T is Ct:
(CTBool[T])(false)
else:
(CTBool[Ct[T]])(false)
func ct*[T: BaseUint](x: T): Ct[T] {.inline.}=
(Ct[T])(x)