Hashing Code I Index   <<   >>

 

#define DO(n,stmts)      {I i,_n=(n); for(i=0;i<_n;++i){stmts;}}


i.    x⍳y    DO(xn, h=HF(x[i]); while(*h>=0&&x[*h]!=x[i])if(hm==++h)h=h0; if(*h<0)*h=i;    );
             DO(yn, h=HF(y[i]); while(*h>=0&&x[*h]!=y[i])if(hm==++h)h=h0; *z++=*h<0?xn:*h; );

i.~   x⍳x    DO(xn, h=HF(x[i]); while(*h>=0&&x[*h]!=x[i])if(hm==++h)h=h0; if(*h<0)*h=i; *z++=*h;);


e.~   y∊x    DO(xn, h=HF(x[i]); while(*h!=M&&  *h !=x[i])if(hm==++h)h=h0; if(*h==M)*h=x[i];);
             DO(yn, h=HF(y[i]); while(*h!=M&&  *h !=y[i])if(hm==++h)h=h0; *z++=*h!=M;      );

~.    ∪x     DO(xn, h=HF(x[i]); while(*h!=M&&  *h !=x[i])if(hm==++h)h=h0; if(*h==M)*h=*z++=x[i];  );
~:    ≠x     DO(xn, h=HF(x[i]); while(*h!=M&&  *h !=x[i])if(hm==++h)h=h0; if(*z++=*h==M)*h=x[i];  );
#@~.  (≢∪)x  DO(xn, h=HF(x[i]); while(*h!=M&&  *h !=x[i])if(hm==++h)h=h0; if(*h==M){*h=x[i]; ++c;});