docs: @Override
  	public final MutableObjectIterator<T> getIterator() {
  		return new MutableObjectIterator<T>()
  		{
  			private final int size = size();
  			private int current = 0;
  			
  			private int currentSegment = 0;
  			private int currentOffset = 0;
  			
  			private MemorySegment currentIndexSegment = sortIndex.get(0);
  
  			@Override
  			public T next(T target) {
  				if (this.current < this.size) {
  					this.current++;
  					if (this.currentOffset > lastIndexEntryOffset) {
  						this.currentOffset = 0;
  						this.currentIndexSegment = sortIndex.get(++this.currentSegment);
  					}
  					
  					long pointer = this.currentIndexSegment.getLong(this.currentOffset) & POINTER_MASK;
  					this.currentOffset += indexEntrySize;
  					
  					try {
  						return getRecordFromBuffer(target, pointer);
  					}
  					catch (IOException ioe) {
  						throw new RuntimeException(ioe);
  					}
  				}
  				else {
  					return null;
  				}
  			}
  
  			@Override
  			public T next()
  			{
  				if (this.current < this.size) {
  					this.current++;
  					if (this.currentOffset > lastIndexEntryOffset) {
  						this.currentOffset = 0;
  						this.currentIndexSegment = sortIndex.get(++this.currentSegment);
  					}
  
  					long pointer = this.currentIndexSegment.getLong(this.currentOffset);
  					this.currentOffset += indexEntrySize;
  
  					try {
  						return getRecordFromBuffer(pointer);
  					}
  					catch (IOException ioe) {
  						throw new RuntimeException(ioe);
  					}
  				}
  				else {
  					return null;
  				}
  			}
  		};
  	}