MCPcopy Create free account
hub / github.com/brimdata/super / buildList

Function buildList

runtime/vam/expr/arrayexpr.go:49–118  ·  view source on GitHub ↗
(sctx *super.Context, elems []ListElem, in []vector.Any)

Source from the content-addressed store, hash-verified

47}
48
49func buildList(sctx *super.Context, elems []ListElem, in []vector.Any) ([]uint32, vector.Any) {
50 n := in[0].Len()
51 var spreadOffs [][]uint32
52 unionTags := make([][]uint32, len(elems))
53 var viewIndexes [][]uint32
54 var vecs []vector.Any
55 var vecTags []uint32
56 for i, elem := range elems {
57 vec := in[i]
58 var offsets, index []uint32
59 if elem.Spread != nil {
60 vec, offsets, index = unwrapSpread(in[i])
61 if vec == nil {
62 // drop unspreadable elements.
63 continue
64 }
65 }
66 vecTags = append(vecTags, uint32(len(vecs)))
67 if union, ok := vec.(*vector.Union); ok && elem.Spread != nil {
68 vecs = append(vecs, union.Values...)
69 unionTags[i] = union.Tags
70 } else {
71 vecs = append(vecs, vec)
72 }
73 spreadOffs = append(spreadOffs, offsets)
74 viewIndexes = append(viewIndexes, index)
75 }
76 offsets := []uint32{0}
77 var tags []uint32
78 for i := range n {
79 var size uint32
80 for k, spreadOff := range spreadOffs {
81 tag := vecTags[k]
82 utags := unionTags[k]
83 if len(spreadOff) == 0 {
84 if utags != nil {
85 tag += utags[i]
86 }
87 tags = append(tags, tag)
88 size++
89 } else {
90 if index := viewIndexes[k]; index != nil {
91 i = index[i]
92 }
93 off := spreadOff[i]
94 for end := spreadOff[i+1]; off < end; off++ {
95 if utags != nil {
96 tags = append(tags, tag+utags[off])
97 } else {
98 tags = append(tags, tag)
99 }
100 size++
101 }
102 }
103 }
104 offsets = append(offsets, offsets[i]+size)
105 }
106 if len(vecs) == 1 {

Callers 2

evalMethod · 0.85
evalMethod · 0.85

Calls 7

UniqueTypesFunction · 0.92
NewUnionFunction · 0.92
unwrapSpreadFunction · 0.85
mergeSameTypeVecsFunction · 0.85
LookupTypeUnionMethod · 0.80
LenMethod · 0.65
TypeMethod · 0.65

Tested by

no test coverage detected