Like Prometheus, but for logs.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
loki/pkg/compute/equality_numeric_kernels.go

233 lines
5.4 KiB

package compute
import (
"github.com/grafana/loki/v3/pkg/columnar"
"github.com/grafana/loki/v3/pkg/memory"
)
type numericEqualityKernel[T columnar.Numeric] interface {
DoSS(left, right T) bool
DoSA(out *memory.Bitmap, left T, right []T)
DoAS(out *memory.Bitmap, left []T, right T)
DoAA(out *memory.Bitmap, left, right []T)
}
var (
int64EqualKernel numericEqualityKernel[int64] = numericEqualKernelImpl[int64]{}
int64NotEqualKernel numericEqualityKernel[int64] = numericNotEqualKernelImpl[int64]{}
int64GTEKernel numericEqualityKernel[int64] = numericGTEKernelImpl[int64]{}
int64GTKernel numericEqualityKernel[int64] = numericGTKernelImpl[int64]{}
int64LTEKernel numericEqualityKernel[int64] = numericLTEKernelImpl[int64]{}
int64LTKernel numericEqualityKernel[int64] = numericLTKernelImpl[int64]{}
uint64EqualKernel numericEqualityKernel[uint64] = numericEqualKernelImpl[uint64]{}
uint64NotEqualKernel numericEqualityKernel[uint64] = numericNotEqualKernelImpl[uint64]{}
uint64GTEKernel numericEqualityKernel[uint64] = numericGTEKernelImpl[uint64]{}
uint64GTKernel numericEqualityKernel[uint64] = numericGTKernelImpl[uint64]{}
uint64LTEKernel numericEqualityKernel[uint64] = numericLTEKernelImpl[uint64]{}
uint64LTKernel numericEqualityKernel[uint64] = numericLTKernelImpl[uint64]{}
)
type numericEqualKernelImpl[T columnar.Numeric] struct{}
func (numericEqualKernelImpl[T]) DoSS(left, right T) bool {
return left == right
}
func (numericEqualKernelImpl[T]) DoSA(out *memory.Bitmap, left T, right []T) {
out.Resize(len(right))
for i := range right {
out.Set(i, left == right[i])
}
}
func (numericEqualKernelImpl[T]) DoAS(out *memory.Bitmap, left []T, right T) {
out.Resize(len(left))
for i := range len(left) {
out.Set(i, left[i] == right)
}
}
func (numericEqualKernelImpl[T]) DoAA(out *memory.Bitmap, left, right []T) {
if len(left) != len(right) {
panic("invalid length")
}
out.Resize(len(left))
for i := range len(left) {
out.Set(i, left[i] == right[i])
}
}
type numericNotEqualKernelImpl[T columnar.Numeric] struct{}
func (numericNotEqualKernelImpl[T]) DoSS(left, right T) bool {
return left != right
}
func (numericNotEqualKernelImpl[T]) DoSA(out *memory.Bitmap, left T, right []T) {
out.Resize(len(right))
for i := range right {
out.Set(i, left != right[i])
}
}
func (numericNotEqualKernelImpl[T]) DoAS(out *memory.Bitmap, left []T, right T) {
out.Resize(len(left))
for i := range len(left) {
out.Set(i, left[i] != right)
}
}
func (numericNotEqualKernelImpl[T]) DoAA(out *memory.Bitmap, left, right []T) {
if len(left) != len(right) {
panic("invalid length")
}
out.Resize(len(left))
for i := range len(left) {
out.Set(i, left[i] != right[i])
}
}
type numericGTKernelImpl[T columnar.Numeric] struct{}
func (numericGTKernelImpl[T]) DoSS(left, right T) bool {
return left > right
}
func (numericGTKernelImpl[T]) DoSA(out *memory.Bitmap, left T, right []T) {
out.Resize(len(right))
for i := range right {
out.Set(i, left > right[i])
}
}
func (numericGTKernelImpl[T]) DoAS(out *memory.Bitmap, left []T, right T) {
out.Resize(len(left))
for i := range len(left) {
out.Set(i, left[i] > right)
}
}
func (numericGTKernelImpl[T]) DoAA(out *memory.Bitmap, left, right []T) {
if len(left) != len(right) {
panic("invalid length")
}
out.Resize(len(left))
for i := range len(left) {
out.Set(i, left[i] > right[i])
}
}
type numericGTEKernelImpl[T columnar.Numeric] struct{}
func (numericGTEKernelImpl[T]) DoSS(left, right T) bool {
return left >= right
}
func (numericGTEKernelImpl[T]) DoSA(out *memory.Bitmap, left T, right []T) {
out.Resize(len(right))
for i := range right {
out.Set(i, left >= right[i])
}
}
func (numericGTEKernelImpl[T]) DoAS(out *memory.Bitmap, left []T, right T) {
out.Resize(len(left))
for i := range len(left) {
out.Set(i, left[i] >= right)
}
}
func (numericGTEKernelImpl[T]) DoAA(out *memory.Bitmap, left, right []T) {
if len(left) != len(right) {
panic("invalid length")
}
out.Resize(len(left))
for i := range len(left) {
out.Set(i, left[i] >= right[i])
}
}
type numericLTKernelImpl[T columnar.Numeric] struct{}
func (numericLTKernelImpl[T]) DoSS(left, right T) bool {
return left < right
}
func (numericLTKernelImpl[T]) DoSA(out *memory.Bitmap, left T, right []T) {
out.Resize(len(right))
for i := range right {
out.Set(i, left < right[i])
}
}
func (numericLTKernelImpl[T]) DoAS(out *memory.Bitmap, left []T, right T) {
out.Resize(len(left))
for i := range len(left) {
out.Set(i, left[i] < right)
}
}
func (numericLTKernelImpl[T]) DoAA(out *memory.Bitmap, left, right []T) {
if len(left) != len(right) {
panic("invalid length")
}
out.Resize(len(left))
for i := range len(left) {
out.Set(i, left[i] < right[i])
}
}
type numericLTEKernelImpl[T columnar.Numeric] struct{}
func (numericLTEKernelImpl[T]) DoSS(left, right T) bool {
return left <= right
}
func (numericLTEKernelImpl[T]) DoSA(out *memory.Bitmap, left T, right []T) {
out.Resize(len(right))
for i := range right {
out.Set(i, left <= right[i])
}
}
func (numericLTEKernelImpl[T]) DoAS(out *memory.Bitmap, left []T, right T) {
out.Resize(len(left))
for i := range len(left) {
out.Set(i, left[i] <= right)
}
}
func (numericLTEKernelImpl[T]) DoAA(out *memory.Bitmap, left, right []T) {
if len(left) != len(right) {
panic("invalid length")
}
out.Resize(len(left))
for i := range len(left) {
out.Set(i, left[i] <= right[i])
}
}