1234567891011121314151617181920212223242526272829 |
- package upload
- import (
- "iter"
- "golang.org/x/exp/constraints"
- )
- type Chunk[I constraints.Integer] struct {
- Offset I
- N 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++
- if !yield(n, Chunk[I]{off, min(chunkSize, size-off)}) {
- return
- }
- }
- }
- }
|