in arrow/compute/internal/kernels/scalar_comparisons.go [380:504]
func getCmpOp[T arrow.NumericType](op CompareOperator) *cmpOp[T] {
switch op {
case CmpEQ:
return &cmpOp[T]{
arrArr: func(lt, rt []T, u []uint32) {
for i := range u {
if lt[i] == rt[i] {
u[i] = 1
} else {
u[i] = 0
}
}
},
arrScalar: func(lt []T, rt T, u []uint32) {
for i := range u {
if lt[i] == rt {
u[i] = 1
} else {
u[i] = 0
}
}
},
scalarArr: func(lt T, rt []T, u []uint32) {
for i := range u {
if lt == rt[i] {
u[i] = 1
} else {
u[i] = 0
}
}
},
}
case CmpNE:
return &cmpOp[T]{
arrArr: func(lt, rt []T, u []uint32) {
for i := range u {
if lt[i] != rt[i] {
u[i] = 1
} else {
u[i] = 0
}
}
},
arrScalar: func(lt []T, rt T, u []uint32) {
for i := range u {
if lt[i] != rt {
u[i] = 1
} else {
u[i] = 0
}
}
},
scalarArr: func(lt T, rt []T, u []uint32) {
for i := range u {
if lt != rt[i] {
u[i] = 1
} else {
u[i] = 0
}
}
},
}
case CmpGT:
return &cmpOp[T]{
arrArr: func(lt, rt []T, u []uint32) {
for i := range u {
if lt[i] > rt[i] {
u[i] = 1
} else {
u[i] = 0
}
}
},
arrScalar: func(lt []T, rt T, u []uint32) {
for i := range u {
if lt[i] > rt {
u[i] = 1
} else {
u[i] = 0
}
}
},
scalarArr: func(lt T, rt []T, u []uint32) {
for i := range u {
if lt > rt[i] {
u[i] = 1
} else {
u[i] = 0
}
}
},
}
case CmpGE:
return &cmpOp[T]{
arrArr: func(lt, rt []T, u []uint32) {
for i := range u {
if lt[i] >= rt[i] {
u[i] = 1
} else {
u[i] = 0
}
}
},
arrScalar: func(lt []T, rt T, u []uint32) {
for i := range u {
if lt[i] >= rt {
u[i] = 1
} else {
u[i] = 0
}
}
},
scalarArr: func(lt T, rt []T, u []uint32) {
for i := range u {
if lt >= rt[i] {
u[i] = 1
} else {
u[i] = 0
}
}
},
}
}
return nil
}