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

Method eval

runtime/vam/expr/conditional.go:29–72  ·  view source on GitHub ↗
(vecs ...vector.Any)

Source from the content-addressed store, hash-verified

27}
28
29func (c *conditional) eval(vecs ...vector.Any) vector.Any {
30 predVec, thisVec := vecs[0], vecs[1]
31 switch predVec.Kind() {
32 case vector.KindBool:
33 case vector.KindNull:
34 return c.elseExpr.Eval(thisVec)
35 case vector.KindError:
36 return predVec
37 default:
38 return vector.NewWrappedError(c.sctx, "?-operator: bool predicate required", predVec)
39 }
40 var elseIndex []uint32
41 switch predVec := vector.Under(predVec).(type) {
42 case *vector.Const:
43 if vector.BoolValue(predVec, 0) {
44 return c.thenExpr.Eval(thisVec)
45 }
46 return c.elseExpr.Eval(thisVec)
47 case *vector.Bool:
48 if predVec.IsZero() {
49 return c.elseExpr.Eval(thisVec)
50 }
51 for i := range predVec.Len() {
52 if !predVec.IsSet(i) {
53 elseIndex = append(elseIndex, i)
54 }
55 }
56 default:
57 for i := range predVec.Len() {
58 if !vector.BoolValue(predVec, i) {
59 elseIndex = append(elseIndex, i)
60 }
61 }
62 }
63 if len(elseIndex) == 0 {
64 return c.thenExpr.Eval(thisVec)
65 }
66 elseVec := c.elseExpr.Eval(thisVec)
67 if len(elseIndex) == int(elseVec.Len()) {
68 return elseVec
69 }
70 thenVec := c.thenExpr.Eval(thisVec)
71 return combine(thenVec, elseVec, elseIndex)
72}
73
74func BoolMask(mask vector.Any) (*roaring.Bitmap, *roaring.Bitmap) {
75 bools := roaring.New()

Callers

nothing calls this directly

Calls 9

NewWrappedErrorFunction · 0.92
UnderFunction · 0.92
BoolValueFunction · 0.92
IsSetMethod · 0.80
combineFunction · 0.70
KindMethod · 0.65
EvalMethod · 0.65
LenMethod · 0.65
IsZeroMethod · 0.45

Tested by

no test coverage detected