rem: for (p=x->s; p<=(x->s+x->len-4); p+=4) { v=(*p<<24)+(p[1]<<16)+(p[2]<<8)+p[3]; h+=v^(v>>3); }
add: p=x->s; if (x->len>=4){ for (;p<=(x->s+x->len-4); p+=4){ v=(*p<<24)+(p[1]<<16)+(p[2]<<8)+p[3]; h+=v^(v>>3); } };
context: unsigned int ds_get_hash(str *x, str *y){	char* p;	register unsigned v;	register unsigned h;	if(!x && !y)		return 0;	h=0;	if(x)	{		for (p=x->s; p<=(x->s+x->len-4); p+=4)		{			v=(*p<<24)+(p[1]<<16)+(p[2]<<8)+p[3];			h+=v^(v>>3);		}		v=0;		for (;p<(x->s+x->len); p++)		{ 			v<<=8; 			v+=*p;		}		h+=v^(v>>3);	}	if(y)	{		for (p=y->s; p<=(y->s+y->len-4); p+=4)		{			v=(*p<<24)+(p[1]<<16)+(p[2]<<8)+p[3];			h+=v^(v>>3);		}			v=0;		for (;p<(y->s+y->len); p++)		{ 			v<<=8; 			v+=*p;		}		h+=v^(v>>3);	}	h=((h)+(h>>11))+((h>>13)+(h>>23));	return (h)?h:1;}