@@ -25,22 +25,31 @@ _reshape(v, itr) = _reshape(v, itr, Base.IteratorSize(itr))
25
25
_reshape (v, itr, :: Base.HasShape ) = reshape (v, axes (itr))
26
26
_reshape (v, itr, :: Union{Base.HasLength, Base.SizeUnknown} ) = v
27
27
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)
32
38
33
39
collect_structarray (itr, fr; initializer = default_initializer) =
34
40
collect_structarray (itr, fr, Base. IteratorSize (itr); initializer = initializer)
35
41
42
+ collect_structarray (itr, :: Nothing ; initializer = default_initializer) =
43
+ collect_empty_structarray (itr; initializer = initializer)
44
+
36
45
function collect_empty_structarray (itr:: T ; initializer = default_initializer) where {T}
37
46
S = Core. Compiler. return_type (first, Tuple{T})
38
47
res = initializer (S, (0 ,))
39
48
_reshape (res, itr)
40
49
end
41
50
42
51
function collect_structarray (itr, elem, sz:: Union{Base.HasShape, Base.HasLength} ;
43
- initializer = default_initializer)
52
+ initializer = default_initializer)
44
53
el, i = elem
45
54
S = typeof (el)
46
55
dest = initializer (S, (length (itr),))
0 commit comments