UNPKG

gnablib

Version:

A lean, zero dependency library to provide a useful base for your project.

2 lines 1.8 kB
/*! Copyright 2023-2024 the gnablib contributors MPL-1.1 */ import{sNum as t}from"../safe/safe.js";export function fromDense2(t){const n=t>>3&1,e=t>>2&n,o=n-(n&(1-(t>>1))*(t>>2));return t&7>>2*e<<4|e<<7|(t&7>>2*n|(t>>4&6)*(e&1-o)|o<<3)}export function toDense2Unsafe(t,n){const e=t>>3&1,o=(t&=1|6*(1-e))<<4,s=n>>3&1;return n&=1|6*(1-s),e?s?14|o|n:(6&n)<<4|o|12|1&n:s?8|o|n:o|n}export function toDense2(n,e){return t("d0",n).unsigned().atMost(9).throwNot(),t("d1",e).unsigned().atMost(9).throwNot(),toDense2Unsafe(n,e)}export function fromDense3Unsafe(t){const n=t>>3&1;let e=t&6*n;e=(96*(e>>2&e>>1)&t)>>5|e<<1;const o=n&(e>>3&1-(e>>1|e)|e>>3&e>>2&e),s=n&(e>>2&1-(e>>1|e)|e>>3&e>>2&e>>1),r=n&(1-(e>>3|e>>2|e>>1|e)|e>>3&e>>2&(e>>1|e)),u=1-s&e>>3&e>>2;let f=t&(7>>2*(s|u)<<4|768*u);f=240&(f|f>>3|s<<7);let i=t&(1|(1-r)*(6<<n*(7*(e>>3&1)|4*(e>>2&1))));return i=15&(i|i>>4|i>>7|r<<3),(t&7>>2*o<<7)<<1|o<<11|f|i}export function fromDense3(n){return t("value",n).unsigned().atMost(1023).throwNot(),fromDense3Unsafe(n)}export function toDense3Unsafe(t,n,e){let o=0;const s=t>>3&1;o|=(t&=1|6*(1-s))<<7;const r=n>>3&1;o|=(n&=1|6*(1-r))<<4;const u=e>>3&1;return o|=e&=1|6*(1-u),s?r?u?110|o:o|(6&e)<<7|14:u?-65&o|(6&n)<<7|46:-3&o|(6&e)<<7|12:r?u?78|o:-5&o|(6&e)<<4|10:u?8|o:o}export function toDense3(n,e,o){return t("d0",n).unsigned().atMost(9).throwNot(),t("d1",e).unsigned().atMost(9).throwNot(),t("d2",o).unsigned().atMost(9).throwNot(),toDense3Unsafe(n,e,o)}export function push2DigitsToBytes(n,e,o){t("value",n).unsigned().lt(100).throwNot();const s=7&o,r=o>>3;return e[r]|=n<<1-s|n>>s-1,e[r+1]=n<<9-s,o+7}export function push3DigitsToBytes(n,e,o){t("value",n).unsigned().lt(1e3).throwNot();const s=7&o,r=o>>3,u=n%10,f=toDense3((n=n/10|0)/10|0,n%10,u);return e[r]|=f>>s+2,e[r+1]=f<<8-s,e[r+2]=f<<16-s,o+10}