in arrow/compute/internal/kernels/scalar_comparisons.go [229:354]
func getCmpDec[T decimal128.Num | decimal256.Num](op CompareOperator, fns decCmp[T]) *cmpOp[T] {
switch op {
case CmpEQ:
return &cmpOp[T]{
arrArr: func(lt, rt []T, u []uint32) {
for i := range lt {
if lt[i] == rt[i] {
u[i] = 1
} else {
u[i] = 0
}
}
},
arrScalar: func(lt []T, rt T, u []uint32) {
for i := range lt {
if lt[i] == rt {
u[i] = 1
} else {
u[i] = 0
}
}
},
scalarArr: func(lt T, rt []T, u []uint32) {
for i := range rt {
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 lt {
if lt[i] != rt[i] {
u[i] = 1
} else {
u[i] = 0
}
}
},
arrScalar: func(lt []T, rt T, u []uint32) {
for i := range lt {
if lt[i] != rt {
u[i] = 1
} else {
u[i] = 0
}
}
},
scalarArr: func(lt T, rt []T, u []uint32) {
for i := range rt {
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 lt {
if fns.Gt(lt[i], rt[i]) {
u[i] = 1
} else {
u[i] = 0
}
}
},
arrScalar: func(lt []T, rt T, u []uint32) {
for i := range lt {
if fns.Gt(lt[i], rt) {
u[i] = 1
} else {
u[i] = 0
}
}
},
scalarArr: func(lt T, rt []T, u []uint32) {
for i := range rt {
if fns.Gt(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 lt {
if fns.Ge(lt[i], rt[i]) {
u[i] = 1
} else {
u[i] = 0
}
}
},
arrScalar: func(lt []T, rt T, u []uint32) {
for i := range lt {
if fns.Ge(lt[i], rt) {
u[i] = 1
} else {
u[i] = 0
}
}
},
scalarArr: func(lt T, rt []T, u []uint32) {
for i := range rt {
if fns.Ge(lt, rt[i]) {
u[i] = 1
} else {
u[i] = 0
}
}
},
}
}
debug.Assert(false, "")
return nil
}