func createPreloadingPartitionIterator(iterator sif.PartitionIterator, preloadCount int) sif.PartitionIterator {
	result := &preloadingPartitionIterator{
		iterator: iterator,
		pchan:    make(chan *preloadedPartition, preloadCount),
		errChan:  make(chan error, preloadCount),
	}
	go result.loadPartitions()
	return result
}
createPreloadingPartitionIterator creates a new preloadingPartitionIterator
package dataframe
import (
	"sync"
	"github.com/go-sif/sif"
	"github.com/go-sif/sif/errors"
)
type preloadedPartition struct {
	part   sif.Partition
	unlock func()
}
type preloadingPartitionIterator struct {
	lock            sync.Mutex
	iterator        sif.PartitionIterator
	pchan           chan *preloadedPartition
	errChan         chan error
	endListeners    []func()
	finishedLoading bool
}