class SeekAbleIterator<E> implements Iterator, HgSeekAble {

    private final Iterator<E> iterator;
    private final Consumer<byte[]> seeker;
    private final Supplier<byte[]> positioner;

    private SeekAbleIterator(Iterator<E> iterator, Supplier<byte[]> positioner,
                             Consumer<byte[]> seeker) {
        this.iterator = iterator;
        this.positioner = positioner;
        this.seeker = seeker;
    }

    public static <E> SeekAbleIterator of(Iterator<E> iterator, Supplier<byte[]> positioner,
                                          Consumer<byte[]> seeker) {<FILL_FUNCTION_BODY>}

    @Override
    public byte[] position() {
        return this.positioner.get();
    }

    @Override
    public void seek(byte[] position) {
        this.seeker.accept(position);
    }

    @Override
    public boolean hasNext() {
        return this.iterator.hasNext();
    }

    @Override
    public E next() {
        return this.iterator.next();
    }
}

        HgAssert.isArgumentNotNull(iterator, "iterator");
        HgAssert.isArgumentNotNull(positioner, "positioner");
        HgAssert.isArgumentNotNull(seeker, "seeker");
        return new SeekAbleIterator(iterator, positioner, seeker);
    
<no_super_class>