return (in & valmask) >>> valmaskmin;
}
public long setval(long in, BitVector targ) {
- long ret = 0;
- for(int i=0; i<targ.length(); i++)
- if (targ.get(i))
+ long ret = in;
+ if (targ.length() != (1+valmaskmax-valmaskmin))
+ throw new RuntimeException("size mismatch trying to do "+this+".setval("+targ+")");
+ for(int i=valmaskmin; i<=valmaskmax; i++)
+ if (targ.get(i-valmaskmin))
ret |= (1L << i);
- if (targ.get(targ.length()-1))
- ret |= (-1L << targ.length());
- return setval(in, ret);
+ else
+ ret &= ~(1L << i);
+ return ret;
}
public long setval(long in, long targ) {
if (((targ << valmaskmin) & ~valmask) != 0) throw new RuntimeException("setval() with argument bigger than mask field");