Spaces:
Running
Running
File size: 1,042 Bytes
b110593 |
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 |
// _ _
// __ _____ __ ___ ___ __ _| |_ ___
// \ \ /\ / / _ \/ _` \ \ / / |/ _` | __/ _ \
// \ V V / __/ (_| |\ V /| | (_| | || __/
// \_/\_/ \___|\__,_| \_/ |_|\__,_|\__\___|
//
// Copyright © 2016 - 2024 Weaviate B.V. All rights reserved.
//
// CONTACT: [email protected]
//
package sorter
type comparator struct {
comparators []basicComparator
}
func newComparator(dataTypesHelper *dataTypesHelper, propNames []string, orders []string) *comparator {
provider := &basicComparatorProvider{}
comparators := make([]basicComparator, len(propNames))
for level, propName := range propNames {
dataType := dataTypesHelper.getType(propName)
comparators[level] = provider.provide(dataType, orders[level])
}
return &comparator{comparators}
}
func (c *comparator) compare(a, b *comparable) int {
for level, comparator := range c.comparators {
if res := comparator.compare(a.values[level], b.values[level]); res != 0 {
return res
}
}
return 0
}
|