From e6a591275a85a3e32e56d2ca951d5efd0edc7826 Mon Sep 17 00:00:00 2001 From: Andrew Kane Date: Thu, 11 Apr 2024 18:33:54 -0700 Subject: [PATCH] Added halfvec_cmp_internal function [skip ci] --- src/halfvec.c | 27 +++++++++++++++++++++++++++ src/halfvec.h | 1 + 2 files changed, 28 insertions(+) diff --git a/src/halfvec.c b/src/halfvec.c index bdd86cc..b165d38 100644 --- a/src/halfvec.c +++ b/src/halfvec.c @@ -998,3 +998,30 @@ halfvec_subvector(PG_FUNCTION_ARGS) PG_RETURN_POINTER(result); } + +/* + * Internal helper to compare half vectors + */ +int +halfvec_cmp_internal(HalfVector * a, HalfVector * b) +{ + int dim = Min(a->dim, b->dim); + + /* Check values before dimensions to be consistent with Postgres arrays */ + for (int i = 0; i < dim; i++) + { + if (a->x[i] < b->x[i]) + return -1; + + if (a->x[i] > b->x[i]) + return 1; + } + + if (a->dim < b->dim) + return -1; + + if (a->dim > b->dim) + return 1; + + return 0; +} diff --git a/src/halfvec.h b/src/halfvec.h index 868a337..8f8abdb 100644 --- a/src/halfvec.h +++ b/src/halfvec.h @@ -45,5 +45,6 @@ HalfVector *InitHalfVector(int dim); float HalfToFloat4(half num); half Float4ToHalf(float num); half Float4ToHalfUnchecked(float num); +int halfvec_cmp_internal(HalfVector * a, HalfVector * b); #endif