cyclic redundancy check 32 logic

bitwise remainder operationを経由して計算されたvaluesからencoder[default, stream]を使用可能。

encoder

1. declare values
const vs=map(false,new Uint32Array(256),(_,i)=>reduce(false,8,a=>1&a?poly^a>>>1:a>>>1,i))

2. declare this.encode
this.encode=v=>~reduce(false,v,(a,v)=>a>>>8^vs[0xff&(a^v)],0xffffffff)>>>0

stream

part

1. declare values
const vs=map(false,new Uint32Array(256),(_,i)=>reduce(false,8,a=>1&a?poly^a>>>1:a>>>1,i))

2. declare this.encode
this.encode=v=>reduce(false,v,(a,v)=>a>>>8^vs[0xff&(a^v)],0)>>>0

stream encoder

3. declare call
const c=(v,vs)=>reduce(false,32,(a,_,i)=>1&v>>>i?a^vs[i]:a,0)>>>0

4. declare values
,vs=reduce(false,18,(a,_,i)=>{
    if(2<i)a[i-2]=map(false,a[i-3],(v,_,vs)=>c(v,vs))
    else a[0]=map(false,a[0],(v,_,vs)=>c(v,vs))
    return a
},[map(false,new Uint32Array(32),(v,i)=>0===i?poly:1<<i-1)])

5. declare this.encode
this.encode=v=>~reduce(false,v,(a,v)=>(32768===v[1]?c(a,vs[15]):reduce(false,15,(a,_,i)=>1&v[1]>>>i?c(a,vs[i]):a,a))^v[0]>>>0,0xffffffff)>>>0