123456789101112131415161718192021222324252627 |
- package upload
- import (
- "iter"
- "golang.org/x/exp/constraints"
- )
- type Chunk[I constraints.Integer] struct {
- Offset I
- Size I
- }
- // Chunks yields a sequence of a part number and a Chunk. The Chunk is the offset
- // and size of the chunk. The last chunk may be smaller than chunkSize if size is
- // not a multiple of chunkSize.
- //
- // The first part number is 1 and increases monotonically.
- func Chunks[I constraints.Integer](size, chunkSize I) iter.Seq2[int, Chunk[I]] {
- return func(yield func(int, Chunk[I]) bool) {
- var n int
- for off := I(0); off < size; off += chunkSize {
- n++
- yield(n, Chunk[I]{off, min(chunkSize, size-off)})
- }
- }
- }
|