@@ -22,7 +22,7 @@ func (s *stream[T]) Where(predicate func(T) bool) Stream[T] {
2222 }
2323 }
2424 },
25- size : nil , // LOSE: unknown how many pass filter
25+ size : - 1 , // LOSE: unknown how many pass filter
2626 }
2727}
2828
@@ -98,10 +98,10 @@ func (s *stream[T]) SelectWithIndex(mapper func(T, int) T) Stream[T] {
9898// ).ToSlice()
9999// // []string{"num_1", "num_2", "num_3"}
100100func Select [T , R any ](enum Enumerable [T ], mapper func (T ) R ) Stream [R ] {
101- var size * int
101+ size := - 1
102102 if sizable , ok := enum .(Sizable [T ]); ok {
103103 if s , known := sizable .Size (); known {
104- size = & s
104+ size = s
105105 }
106106 }
107107 return & stream [R ]{
@@ -132,10 +132,10 @@ func Select[T, R any](enum Enumerable[T], mapper func(T) R) Stream[R] {
132132// ).ToSlice()
133133// // []string{"num_1_at_0", "num_2_at_1", "num_3_at_2"}
134134func SelectWithIndex [T , R any ](enum Enumerable [T ], mapper func (T , int ) R ) Stream [R ] {
135- var size * int
135+ size := - 1
136136 if sizable , ok := enum .(Sizable [T ]); ok {
137137 if s , known := sizable .Size (); known {
138- size = & s
138+ size = s
139139 }
140140 }
141141 return & stream [R ]{
@@ -160,16 +160,15 @@ func SelectWithIndex[T, R any](enum Enumerable[T], mapper func(T, int) R) Stream
160160//
161161// SIZE: Calculated as min(sourceSize, n) if source size known, else n.
162162func (s * stream [T ]) Take (n int ) Stream [T ] {
163- var newSize * int
164- if s .size != nil {
165- size := * s .size
166- if size < n {
167- newSize = & size
163+ var newSize int
164+ if s .size != - 1 {
165+ if s .size < n {
166+ newSize = s .size
168167 } else {
169- newSize = & n
168+ newSize = n
170169 }
171170 } else {
172- newSize = & n // Don't know source size, but result won't exceed n
171+ newSize = n // Don't know source size, but result won't exceed n
173172 }
174173
175174 return & stream [T ]{
@@ -198,15 +197,15 @@ func (s *stream[T]) Take(n int) Stream[T] {
198197//
199198// SIZE: Calculated as max(0, sourceSize - n) if source size known, else unknown.
200199func (s * stream [T ]) Skip (n int ) Stream [T ] {
201- var newSize * int
202- if s .size != nil {
203- size := * s .size - n
200+ var newSize int = - 1
201+ if s .size != - 1 {
202+ size := s .size - n
204203 if size < 0 {
205204 size = 0
206205 }
207- newSize = & size
206+ newSize = size
208207 }
209- // else: nil (unknown)
208+ // else: -1 (unknown)
210209
211210 return & stream [T ]{
212211 sourceFactory : func () func () (T , bool ) {
@@ -224,7 +223,7 @@ func (s *stream[T]) Skip(n int) Stream[T] {
224223 return source ()
225224 }
226225 },
227- size : newSize , // CALCULATED: max(0, source - n) or nil
226+ size : newSize , // CALCULATED: max(0, source - n) or -1
228227 }
229228}
230229
@@ -274,19 +273,19 @@ func TakeOrderedBy[T any](enum Enumerable[T], n int, less func(a, b T) bool) Str
274273 return Empty [T ]()
275274 }
276275
277- var size * int
276+ var size int
278277 if sizable , ok := enum .(Sizable [T ]); ok {
279278 if s , known := sizable .Size (); known {
280279 if s < n {
281- size = & s
280+ size = s
282281 } else {
283- size = & n
282+ size = n
284283 }
285284 } else {
286- size = & n // Don't know source size, but result won't exceed n
285+ size = n // Don't know source size, but result won't exceed n
287286 }
288287 } else {
289- size = & n // Don't know source size, but result won't exceed n
288+ size = n // Don't know source size, but result won't exceed n
290289 }
291290
292291 return & stream [T ]{
@@ -413,6 +412,6 @@ func SelectMany[T, R any](enum Enumerable[T], selector func(T) Enumerable[R]) St
413412 }
414413 }
415414 },
416- size : nil , // LOSE: 1-to-many transformation
415+ size : - 1 , // LOSE: 1-to-many transformation
417416 }
418417}
0 commit comments