diff options
-rw-r--r-- | contrib/intarray/_int.c | 22 |
1 files changed, 5 insertions, 17 deletions
diff --git a/contrib/intarray/_int.c b/contrib/intarray/_int.c index 199a39adc9c..09c7960e157 100644 --- a/contrib/intarray/_int.c +++ b/contrib/intarray/_int.c @@ -967,6 +967,8 @@ internal_size(int *a, int len) return size; } +#define UNIX_UNIQ(a) a = _int_unique(a) + /* r is sorted and size of r > 1 */ static ArrayType * _int_unique(ArrayType *r) @@ -976,6 +978,9 @@ _int_unique(ArrayType *r) *data; int num = ARRNELEMS(r); + if ( num<2 ) + return r; + data = tmp = dr = ARRPTR(r); while (tmp - data < num) if (*tmp != *dr) @@ -2445,23 +2450,6 @@ if (ARRNELEMS(a) > 1) \ qsort((void*)ARRPTR(a), ARRNELEMS(a),sizeof(int4), \ (direction) ? compASC : compDESC ) -#define UNIX_UNIQ(a) a = resize_intArrayType(a, unix_uniq(ARRPTR(a), ARRNELEMS(a))) - -static int32 -unix_uniq(int32 *array, int32 count) -{ - register int32 i, - k = 0; - - for (i = 1; i < count; i++) - if (array[k] != array[i]) - { - k++; - if (i > k) - array[k] = array[i]; - } - return (k + 1); -} Datum intset(PG_FUNCTION_ARGS) |