github.com/weaviate/weaviate@v1.24.6/adapters/repos/db/sorter/comparator.go (about) 1 // _ _ 2 // __ _____ __ ___ ___ __ _| |_ ___ 3 // \ \ /\ / / _ \/ _` \ \ / / |/ _` | __/ _ \ 4 // \ V V / __/ (_| |\ V /| | (_| | || __/ 5 // \_/\_/ \___|\__,_| \_/ |_|\__,_|\__\___| 6 // 7 // Copyright © 2016 - 2024 Weaviate B.V. All rights reserved. 8 // 9 // CONTACT: hello@weaviate.io 10 // 11 12 package sorter 13 14 type comparator struct { 15 comparators []basicComparator 16 } 17 18 func newComparator(dataTypesHelper *dataTypesHelper, propNames []string, orders []string) *comparator { 19 provider := &basicComparatorProvider{} 20 comparators := make([]basicComparator, len(propNames)) 21 for level, propName := range propNames { 22 dataType := dataTypesHelper.getType(propName) 23 comparators[level] = provider.provide(dataType, orders[level]) 24 } 25 return &comparator{comparators} 26 } 27 28 func (c *comparator) compare(a, b *comparable) int { 29 for level, comparator := range c.comparators { 30 if res := comparator.compare(a.values[level], b.values[level]); res != 0 { 31 return res 32 } 33 } 34 return 0 35 }