From d82f6634fe1a8632c59517bda83a071c085e8bf7 Mon Sep 17 00:00:00 2001 From: Andrew Kane Date: Sat, 30 Mar 2024 10:23:56 -0700 Subject: [PATCH] Added dimension checks [skip ci] --- src/halfvec.c | 24 ++++-------------------- src/vector.c | 20 ++++++++++++++++++++ 2 files changed, 24 insertions(+), 20 deletions(-) diff --git a/src/halfvec.c b/src/halfvec.c index 9e937b0..4742c7e 100644 --- a/src/halfvec.c +++ b/src/halfvec.c @@ -723,24 +723,6 @@ halfvec_to_float4(PG_FUNCTION_ARGS) PG_RETURN_POINTER(result); } -/* - * Convert half vector to vector - */ -PGDLLEXPORT PG_FUNCTION_INFO_V1(halfvec_to_vector); -Datum -halfvec_to_vector(PG_FUNCTION_ARGS) -{ - HalfVector *vec = PG_GETARG_HALFVEC_P(0); - - /* TODO Check vector dims in InitVector */ - Vector *result = InitVector(vec->dim); - - for (int i = 0; i < vec->dim; i++) - result->x[i] = HalfToFloat4(vec->x[i]); - - PG_RETURN_POINTER(result); -} - /* * Convert vector to half vec */ @@ -749,9 +731,11 @@ Datum vector_to_halfvec(PG_FUNCTION_ARGS) { Vector *vec = PG_GETARG_VECTOR_P(0); + HalfVector *result; - /* TODO Check halfvec dims in InitHalfVector */ - HalfVector *result = InitHalfVector(vec->dim); + CheckDim(vec->dim); + + result = InitHalfVector(vec->dim); for (int i = 0; i < vec->dim; i++) { diff --git a/src/vector.c b/src/vector.c index 2d0e96a..f719a8f 100644 --- a/src/vector.c +++ b/src/vector.c @@ -533,6 +533,26 @@ vector_to_float4(PG_FUNCTION_ARGS) PG_RETURN_POINTER(result); } +/* + * Convert half vector to vector + */ +PGDLLEXPORT PG_FUNCTION_INFO_V1(halfvec_to_vector); +Datum +halfvec_to_vector(PG_FUNCTION_ARGS) +{ + HalfVector *vec = PG_GETARG_HALFVEC_P(0); + Vector *result; + + CheckDim(vec->dim); + + result = InitVector(vec->dim); + + for (int i = 0; i < vec->dim; i++) + result->x[i] = HalfToFloat4(vec->x[i]); + + PG_RETURN_POINTER(result); +} + /* * Get the L2 distance between vectors */