// NewChunkAlignedReaderAt returns a ReaderAt wrapper that is backed

// by a ReaderAt r of size totalSize where the wrapper guarantees that

// all ReadAt calls are aligned to chunkSize boundaries and of size

// chunkSize (except for the final chunk, which may be shorter).

//

// A chunk-aligned reader is good for caching, letting upper layers have

// any access pattern, but guarantees that the wrapped ReaderAt sees

// only nicely-cacheable access patterns & sizes.

func NewChunkAlignedReaderAt(r SizeReaderAt, chunkSize int) SizeReaderAt {

// ...

}