docs: @Override
    public Iterator<Integer> iterator() {
      return new Iterator<Integer>() {
        private int hs = 0;
  
        private ShortIterator iter;
  
        private int pos = 0;
  
        private int x;
  
        @Override
        public boolean hasNext() {
          return pos < RoaringBitmap.this.highLowContainer.size();
        }
  
        private Iterator<Integer> init() {
          if (pos < RoaringBitmap.this.highLowContainer.size()) {
            iter = RoaringBitmap.this.highLowContainer.getContainerAtIndex(pos).getShortIterator();
            hs = RoaringBitmap.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() {
          // todo: implement
          throw new UnsupportedOperationException();
        }
  
      }.init();
    }