UNPKG

@lancejpollard/bit

Version:
87 lines (76 loc) 1.7 kB
exports.show = function(dec) { return (dec >>> 0).toString(2).padStart(8, '0') } exports.size = function(n) { let i = 0 while (n) { i++ n >>= 1 } return i } exports.rise = function(p) { return 1 << p } exports.read = function(n, l, s) { let r = 8 - l - s let p = exports.rise(8) let o = p - 1 let ol = o << r let or = o >> l let om = or & ol let x = n & om return x >> r } exports.load = function(n, i, x) { let o = 0xff // 0b11111111 let c = exports.size(x) let j = 8 - i // right side start let k = j - c // right side remaining let h = c + i let a = x << k // set bits let b = a ^ o // set bits flip let d = o >> h // mask right let q = d ^ b // let m = o >> j // mask left let s = m << j let t = s ^ q // clear bits! let w = n | a // set the set bits let z = w & ~t // perform some magic https://stackoverflow.com/q/8965521/169992 return z } exports.hide = function(n, i, c) { let s = i + c let r = 8 - s let p = 1 << 8 let o = p - 1 let j = o >> i let k = o << r let h = j & k let g = ~h let z = n & g return z } exports.load_lead = function(uint8, left, size, value) { uint8 = exports.hide(uint8, left, size) let writeSize = exports.size(value) let newLeft = left + size - writeSize return exports.load(uint8, newLeft, value) } exports.hunk = function(n) { return [ (n & 0x000000ff), (n & 0x0000ff00) >> 8, (n & 0x00ff0000) >> 16, (n & 0xff000000) >> 24 ] } exports.make = function(h) { return map[0] << 24 | map[1] << 16 | map[2] << 8 | map[3] } function log(name, val, msg) { console.log(name, exports.show(val), exports.show(val).length, msg || '') }