adix/bitop

Source   Edit  

This is a reimplementation of some things we need from bitops which has CT trouble due to importc's. (I feel it's a better naming/factoring, too).

Procs

proc ceilPow2(x: int): int {.noSideEffect, inline, ...raises: [], tags: [],
                             forbids: [].}
Returns x rounded up to the nearest power of two. <= 0 get 1. Source   Edit  
proc floorPow2(x: int): int {.noSideEffect, inline, ...raises: [], tags: [],
                              forbids: [].}
Returns x rounded down to the nearest power of two. Source   Edit  
proc isPow2(x: int): bool {....raises: [], tags: [], forbids: [].}
Source   Edit  
proc lg(x: int): int {.inline, ...raises: [], tags: [], forbids: [].}
short alias for lgCeil Source   Edit  
proc lgCeil(x: int): int {.inline, ...raises: [], tags: [], forbids: [].}
integer-math only impl of ceil(log2(x)) Source   Edit  
proc lgFloor(x: int): int {.inline, ...raises: [], tags: [], forbids: [].}
integer-math only impl of floor(log2(x)) Source   Edit  
proc lgPow2(x: int): int {.inline, ...raises: [], tags: [], forbids: [].}
Source   Edit  
proc reverseBits(x: uint32): uint32 {....raises: [], tags: [], forbids: [].}
Source   Edit  
proc reverseBits(x: uint64): uint64 {....raises: [], tags: [], forbids: [].}
Source   Edit  
proc reverseBitsByte(x: uint8): uint8 {.inline, ...raises: [], tags: [],
                                        forbids: [].}
Source   Edit  
proc rotateLeftBits(a: uint64; numBits: int): uint64 {.inline, ...raises: [],
    tags: [], forbids: [].}
like bitops Source   Edit  
proc rotateRightBits(a: uint64; numBits: int): uint64 {.inline, ...raises: [],
    tags: [], forbids: [].}
like bitops Source   Edit