Improved vector_out code

This commit is contained in:
Andrew Kane
2024-03-31 09:55:07 -07:00
parent 4b22851bbd
commit 2f2f3631a8

View File

@@ -275,6 +275,9 @@ vector_in(PG_FUNCTION_ARGS)
PG_RETURN_POINTER(result); PG_RETURN_POINTER(result);
} }
#define AppendChar(ptr, c) (*(ptr)++ = (c))
#define AppendFloat(ptr, f) ((ptr) += float_to_shortest_decimal_bufn((f), (ptr)))
/* /*
* Convert internal representation to textual representation * Convert internal representation to textual representation
*/ */
@@ -286,7 +289,6 @@ vector_out(PG_FUNCTION_ARGS)
int dim = vector->dim; int dim = vector->dim;
char *buf; char *buf;
char *ptr; char *ptr;
int n;
/* /*
* Need: * Need:
@@ -301,21 +303,17 @@ vector_out(PG_FUNCTION_ARGS)
buf = (char *) palloc(FLOAT_SHORTEST_DECIMAL_LEN * dim + 2); buf = (char *) palloc(FLOAT_SHORTEST_DECIMAL_LEN * dim + 2);
ptr = buf; ptr = buf;
*ptr = '['; AppendChar(ptr, '[');
ptr++;
for (int i = 0; i < dim; i++) for (int i = 0; i < dim; i++)
{ {
if (i > 0) if (i > 0)
{ AppendChar(ptr, ',');
*ptr = ',';
ptr++;
}
n = float_to_shortest_decimal_bufn(vector->x[i], ptr); AppendFloat(ptr, vector->x[i]);
ptr += n;
} }
*ptr = ']';
ptr++; AppendChar(ptr, ']');
*ptr = '\0'; *ptr = '\0';
PG_FREE_IF_COPY(vector, 0); PG_FREE_IF_COPY(vector, 0);