code: int[] toIntArray() {
  		final int size = finish - start;
  		final int length = (size + 31) >> 5;
  		final int[] ints = new int[length];
  		if (length == 0) return ints;
  		if ((start & ADDRESS_MASK) == 0) {
  			int i = start >> ADDRESS_BITS;
  			int j = length; // how many ints we have to process
  			for (; j > 2; i++) {
  				final long l = bits[i];
  				ints[--j] = (int) (l      );
  				ints[--j] = (int) (l >> 32);
  			}
  			if (j > 0) {
  				final long m = -1L >>> (ADDRESS_SIZE - finish & ADDRESS_MASK);
  				final long l = bits[i] & m;
  				for (int k = 0; j > 0; k++) {
  					ints[--j] = (int) (l >> (k*32));
  				}
  			}
  		} else { // general case
  			int i = 0;
  			for (; i < length - 1; i++) {
  				ints[length - 1 - i] = (int) getBitsAdj(start + (i << 5), 32);
  			}
  			ints[0] = (int) getBitsAdj(start + (i << 5), size - (i << 5));
  		}
  		return ints;
  	}
docs: NOTE: uncertain future