diff options
| author | Jonas Knobloch <jonas.knobloch@t-online.de> | 2026-04-03 20:40:51 +0200 |
|---|---|---|
| committer | Jonas Knobloch <jonas.knobloch@t-online.de> | 2026-04-03 20:40:51 +0200 |
| commit | 7696b62cf3d3d7ea482b7028a49d06522262da4d (patch) | |
| tree | 42f0063774287f98627b3cf8f2993ea53b7bd87b | |
| parent | 1798fbe3881ec0f4abde416771b88285191cbd16 (diff) | |
Add clamped reader
| -rw-r--r-- | dataset/clamped.go | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/dataset/clamped.go b/dataset/clamped.go new file mode 100644 index 0000000..41441b2 --- /dev/null +++ b/dataset/clamped.go @@ -0,0 +1,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 + } + } + } +} |
