summaryrefslogtreecommitdiff
path: root/dataset/clamped.go
blob: 41441b27ebadc373fbe93c37581fdec2ef43fe19 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
package dataset

import "iter"

type ClampedReader struct {
	Reader
	n int
}

func NewClampedReader(r Reader, n int) *ClampedReader {
	return &ClampedReader{
		Reader: r,
		n:      n,
	}
}

func (c *ClampedReader) Num() (int, error) {
	n, err := c.Reader.Num()

	if err != nil {
		return 0, err
	}

	return min(n, c.n), nil
}

func (c *ClampedReader) Texts() iter.Seq2[int, string] {
	return func(yield func(int, string) bool) {
		for n, d := range c.Reader.Texts() {
			if n >= c.n {
				return
			}

			if !yield(n, d) {
				return
			}
		}
	}
}