nim-stint/stint/private/int_negabs.nim

30 lines
910 B
Nim

# Stint
# Copyright 2018 Status Research & Development GmbH
# Licensed under either of
#
# * Apache License, version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0)
# * MIT license ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT)
#
# at your option. This file may not be copied, modified, or distributed except according to those terms.
import
./datatypes,
./initialization, ./int_highlow,
./int_addsub, ./int_comparison
func `-`*[T: IntImpl](x: T): T {.inline.}=
# Negate a multi-precision signed int.
when compileOption("boundChecks"):
if unlikely(x == low(T)):
raise newException(OverflowError, "The lowest negative number cannot be negated")
result = not x
result += one(T)
func abs*[T: IntImpl](x: T): T {.inline.}=
## Returns the absolute value of a signed int.
result = if x.isNegative: -x
else: x