src/intops/impl/pure

Source   Edit  

Pure Nim implementations of arithmetic operations for integers.

Procs

func borrowingSub[T: SomeSignedInt](a, b: T; borrowIn: bool): (T, bool) {.
    ...raises: [], inline, noinit, ...gcsafe.}
Source   Edit  
func borrowingSub[T: SomeUnsignedInt](a, b: T; borrowIn: bool): (T, bool) {.
    ...raises: [], inline, noinit, ...gcsafe.}
Source   Edit  
func carryingAdd[T: SomeSignedInt](a, b: T; carryIn: bool): (T, bool) {.
    ...raises: [], inline, noinit, ...gcsafe.}
Source   Edit  
func carryingAdd[T: SomeUnsignedInt](a, b: T; carryIn: bool): (T, bool) {.
    ...raises: [], inline, noinit, ...gcsafe.}
Source   Edit  
func narrowingDiv(uHi, uLo, v: uint32): (uint32, uint32) {....raises: [], inline,
    noinit, ...gcsafe, tags: [], forbids: [].}

Division uint64 by uint32.

Warning:

  • if uHi == d, quotient does not fit in an uint32
  • if uHi > d result is undefined

To avoid issues, uHi, uLo, and v are normalized i.e. shifted (== multiplied by the same power of 2) so that the most significant bit in d is set.

Source   Edit  
func narrowingDiv(uHi, uLo, v: uint64): (uint64, uint64) {....raises: [], inline,
    noinit, ...gcsafe, tags: [], forbids: [].}
Knuth's Algorithm D implementation. Source   Edit  
func overflowingAdd[T: SomeSignedInt](a, b: T): (T, bool) {....raises: [], inline,
    noinit, ...gcsafe.}
Source   Edit  
func overflowingAdd[T: SomeUnsignedInt](a, b: T): (T, bool) {....raises: [],
    inline, noinit, ...gcsafe.}
Source   Edit  
func overflowingSub[T: SomeSignedInt](a, b: T): (T, bool) {....raises: [], inline,
    noinit, ...gcsafe.}
Source   Edit  
func overflowingSub[T: SomeUnsignedInt](a, b: T): (T, bool) {....raises: [],
    inline, noinit, ...gcsafe.}
Source   Edit  
func saturatingAdd[T: SomeSignedInt](a, b: T): T {....raises: [], inline, noinit,
    ...gcsafe.}
Source   Edit  
func saturatingAdd[T: SomeUnsignedInt](a, b: T): T {....raises: [], inline, noinit,
    ...gcsafe.}
Source   Edit  
func saturatingSub[T: SomeSignedInt](a, b: T): T {....raises: [], inline, noinit,
    ...gcsafe.}
Source   Edit  
func saturatingSub[T: SomeUnsignedInt](a, b: T): T {....raises: [], inline, noinit,
    ...gcsafe.}
Source   Edit  
func wideningMul(a, b: int32): (int32, uint32) {....raises: [], inline, noinit,
    ...gcsafe, tags: [], forbids: [].}
Source   Edit  
func wideningMul(a, b: int64): (int64, uint64) {....raises: [], inline, noinit,
    ...gcsafe, tags: [], forbids: [].}
Source   Edit  
func wideningMul(a, b: uint32): (uint32, uint32) {....raises: [], inline, noinit,
    ...gcsafe, tags: [], forbids: [].}
Source   Edit  
func wideningMul(a, b: uint64): (uint64, uint64) {....raises: [], inline, noinit,
    ...gcsafe, tags: [], forbids: [].}
Source   Edit  
func wideningMulAdd(a, b, c, d: uint32): (uint32, uint32) {....raises: [], inline,
    noinit, ...gcsafe, tags: [], forbids: [].}
Source   Edit  
func wideningMulAdd(a, b, c, d: uint64): (uint64, uint64) {....raises: [], inline,
    noinit, ...gcsafe, tags: [], forbids: [].}
Source   Edit  
func wideningMulAdd(a, b, c: uint32): (uint32, uint32) {....raises: [], inline,
    noinit, ...gcsafe, tags: [], forbids: [].}
Source   Edit  
func wideningMulAdd(a, b, c: uint64): (uint64, uint64) {....raises: [], inline,
    noinit, ...gcsafe, tags: [], forbids: [].}
Source   Edit