docs: @Override
    public Iterator<Integer> iterator() {
      return new Iterator<Integer>() {
        int hs = 0;
  
        ShortIterator iter;
  
        int pos = 0;
  
        int x;
  
        @Override
        public boolean hasNext() {
          return pos < ImmutableRoaringBitmap.this.highLowContainer.size();
        }
  
        public Iterator<Integer> init() {
          if (pos < ImmutableRoaringBitmap.this.highLowContainer.size()) {
            iter = ImmutableRoaringBitmap.this.highLowContainer.getContainerAtIndex(pos)
                .getShortIterator();
            hs = BufferUtil
                .toIntUnsigned(ImmutableRoaringBitmap.this.highLowContainer.getKeyAtIndex(pos)) << 16;
          }
          return this;
        }
  
        @Override
        public Integer next() {
          x = iter.nextAsInt() | hs;
          if (!iter.hasNext()) {
            ++pos;
            init();
          }
          return x;
        }
  
        @Override
        public void remove() {
          throw new RuntimeException("Cannot modify.");
        }
  
      }.init();
    }