/
collection.go
74 lines (61 loc) · 1.81 KB
/
collection.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
package constructors_common
import (
"fmt"
"github.com/Laughs-In-Flowers/countfloyd/lib/feature"
"github.com/Laughs-In-Flowers/data"
)
func CollectionMember() feature.Constructor {
return feature.NewConstructor("COLLECTION_MEMBER", 50, collectionMember)
}
func collectionMember(tag string, r *feature.RawFeature, e feature.CEnv) (feature.Informer, feature.Emitter, feature.Mapper) {
list := r.Values
ex := expander(e, list)
mapped := listMappedToFloat64Keys(ex, 1)
ef := func() data.Item {
m := floatKeysToString(mapped)
d := data.New("")
for k, v := range m {
d.Set(data.NewStringItem(k, v))
}
return data.NewVectorItem(tag, d)
}
mf := func(f *data.Vector) {
n := f.ToFloat64("meta.priority")
if v, ok := mapped[n]; ok {
f.Set(data.NewStringItem(tag, v))
}
}
return construct("COLLECTION_MEMBER", r.Group, tag, list, ex, ef, mf)
}
func CollectionMemberIndexed() feature.Constructor {
return feature.NewConstructor("COLLECTION_MEMBER_INDEXED", 10000, collectionMemberIndexed)
}
func collectionMemberIndexed(tag string, r *feature.RawFeature, e feature.CEnv) (feature.Informer, feature.Emitter, feature.Mapper) {
list := r.Values
ex := expander(e, list)
mapped := listMappedToFloat64Keys(ex, 1)
var nf []*feature.RawFeature
for i, v := range mapped {
nf = append(nf, &feature.RawFeature{
Group: r.Group,
Tag: fmt.Sprintf("%s_%d", r.Tag, int(i)),
Apply: "default",
Values: []string{v},
Constructor: Default(),
})
}
for _, ndf := range nf {
e.SetFeature(ndf)
}
ef := func() data.Item {
d := data.New("")
for _, v := range nf {
d.Set(data.NewStringItem(v.Tag, v.Values[0]))
}
return data.NewVectorItem(tag, d)
}
mf := func(f *data.Vector) {
f.Set(ef())
}
return construct("COLLECTION_MEMBER_INDEXED", r.Group, tag, list, ex, ef, mf)
}