code: private int firstOneInRangeAdj(int from, int to) {
  		// trivial case
  		if (from == to) return to;
  		final int size = to - from;
  		//simple case
  		if (size <= ADDRESS_SIZE) {
  			final int j = Long.numberOfTrailingZeros( getBitsAdj(from, size) );
  			return j >= size ? to : from + j;
  		}
  		int i = from;
  		// check head
  		int a = i & ADDRESS_MASK;
  		if (a != 0) {
  			final int s = ADDRESS_SIZE - a;
  			final int j = Long.numberOfTrailingZeros( getBitsAdj(i, s) );
  			if (j < s) return from + j;
  			i += s;
  		}
  		// check body
  		final int b = to & ADDRESS_MASK;
  		final int t = to - b;
  		while (i < t) {
  			final int j = Long.numberOfTrailingZeros( bits[i >> ADDRESS_BITS] );
  			if (j < ADDRESS_SIZE) return i + j;
  			i += ADDRESS_SIZE;
  		}
  		// check tail
  		if (b != 0) {
  			final int j = Long.numberOfTrailingZeros( getBitsAdj(t, b) );
  			return j >= b ? to : i + j;
  		}
  		// give up
  		return to;
  	}
docs: TODO can eliminate calls to getBitsAdj from these methods