|
1 | | -struct StructArrayInitializer{F} |
| 1 | +arrayof(S, d) = Array{S}(undef, d) |
| 2 | + |
| 3 | +struct StructArrayInitializer{F, G} |
2 | 4 | unwrap::F |
| 5 | + arrayof::G |
3 | 6 | end |
4 | | -StructArrayInitializer() = StructArrayInitializer(t -> false) |
| 7 | +StructArrayInitializer(unwrap = t->false) = StructArrayInitializer(unwrap, arrayof) |
5 | 8 |
|
6 | 9 | const default_initializer = StructArrayInitializer() |
7 | 10 |
|
8 | | -(s::StructArrayInitializer)(S, d) = StructArray{S}(undef, d; unwrap = s.unwrap) |
| 11 | +function (s::StructArrayInitializer)(S, d) |
| 12 | + ai = ArrayInitializer(s.unwrap, s.arrayof) |
| 13 | + buildfromschema(typ -> ai(typ, d), S) |
| 14 | +end |
9 | 15 |
|
10 | | -struct ArrayInitializer{F} |
| 16 | +struct ArrayInitializer{F, G} |
11 | 17 | unwrap::F |
| 18 | + arrayof::G |
12 | 19 | end |
13 | | -ArrayInitializer() = ArrayInitializer(t -> false) |
| 20 | +ArrayInitializer(unwrap = t->false) = ArrayInitializer(unwrap, arrayof) |
14 | 21 |
|
15 | | -(s::ArrayInitializer)(S, d) = _undef_array(S, d; unwrap = s.unwrap) |
| 22 | +(s::ArrayInitializer)(S, d) = s.unwrap(S) ? buildfromschema(typ -> s(typ, d), S) : s.arrayof(S, d) |
16 | 23 |
|
17 | 24 | _reshape(v, itr, ::Base.HasShape) = reshape(v, axes(itr)) |
18 | 25 | _reshape(v, itr, ::Union{Base.HasLength, Base.SizeUnknown}) = v |
|
0 commit comments