30 lines
939 B
Nim
30 lines
939 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, ./int_bitwise_ops
|
|
|
|
func `-`*(x: IntImpl): IntImpl {.inline.}=
|
|
# Negate a multi-precision signed int.
|
|
|
|
when compileOption("boundChecks"):
|
|
if unlikely(x == low(type x)):
|
|
raise newException(OverflowError, "The lowest negative number cannot be negated")
|
|
|
|
result = not x
|
|
result += one(type x)
|
|
|
|
func abs*[T: IntImpl](x: T): T {.inline.}=
|
|
## Returns the absolute value of a signed int.
|
|
|
|
result = if x.isNegative: -x
|
|
else: x
|