@@ -25,22 +25,31 @@ _reshape(v, itr) = _reshape(v, itr, Base.IteratorSize(itr))
2525_reshape (v, itr, :: Base.HasShape ) = reshape (v, axes (itr))
2626_reshape (v, itr, :: Union{Base.HasLength, Base.SizeUnknown} ) = v
2727
28- function collect_structarray (itr; initializer = default_initializer)
29- fr = iterate (itr)
30- fr === nothing ? collect_empty_structarray (itr; initializer = initializer) : collect_structarray (itr, fr; initializer = initializer)
31- end
28+ """
29+ `collect_structarray(itr, fr=iterate(itr); initializer = default_initializer)`
30+
31+ Collects `itr` into a `StructArray`. The user can optionally pass a `initializer`, that is to say
32+ a function `(S, d) -> v` that associates to a type and a size an array of eltype `S`
33+ and size `d`. By default `initializer` returns a `StructArray` of `Array` but custom array types
34+ may be used. `fr` represents the moment in the iteration of `itr` from which to start collecting.
35+ """
36+ collect_structarray (itr; initializer = default_initializer) =
37+ collect_structarray (itr, iterate (itr); initializer = initializer)
3238
3339collect_structarray (itr, fr; initializer = default_initializer) =
3440 collect_structarray (itr, fr, Base. IteratorSize (itr); initializer = initializer)
3541
42+ collect_structarray (itr, :: Nothing ; initializer = default_initializer) =
43+ collect_empty_structarray (itr; initializer = initializer)
44+
3645function collect_empty_structarray (itr:: T ; initializer = default_initializer) where {T}
3746 S = Core. Compiler. return_type (first, Tuple{T})
3847 res = initializer (S, (0 ,))
3948 _reshape (res, itr)
4049end
4150
4251function collect_structarray (itr, elem, sz:: Union{Base.HasShape, Base.HasLength} ;
43- initializer = default_initializer)
52+ initializer = default_initializer)
4453 el, i = elem
4554 S = typeof (el)
4655 dest = initializer (S, (length (itr),))
0 commit comments