Consistently use "superuser" instead of "super user"
[pgsql.git] / src / include / lib / qunique.h
blobd33b219ee41f7d02f7210cf7ade92f20cc011fb3
1 /*-------------------------------------------------------------------------
3 * qunique.h
4 * inline array unique functions
5 * Portions Copyright (c) 2019-2021, PostgreSQL Global Development Group
7 * IDENTIFICATION
8 * src/include/lib/qunique.h
9 *-------------------------------------------------------------------------
12 #ifndef QUNIQUE_H
13 #define QUNIQUE_H
16 * Remove duplicates from a pre-sorted array, according to a user-supplied
17 * comparator. Usually the array should have been sorted with qsort() using
18 * the same arguments. Return the new size.
20 static inline size_t
21 qunique(void *array, size_t elements, size_t width,
22 int (*compare) (const void *, const void *))
24 char *bytes = (char *) array;
25 size_t i,
28 if (elements <= 1)
29 return elements;
31 for (i = 1, j = 0; i < elements; ++i)
33 if (compare(bytes + i * width, bytes + j * width) != 0 &&
34 ++j != i)
35 memcpy(bytes + j * width, bytes + i * width, width);
38 return j + 1;
42 * Like qunique(), but takes a comparator with an extra user data argument
43 * which is passed through, for compatibility with qsort_arg().
45 static inline size_t
46 qunique_arg(void *array, size_t elements, size_t width,
47 int (*compare) (const void *, const void *, void *),
48 void *arg)
50 char *bytes = (char *) array;
51 size_t i,
54 if (elements <= 1)
55 return elements;
57 for (i = 1, j = 0; i < elements; ++i)
59 if (compare(bytes + i * width, bytes + j * width, arg) != 0 &&
60 ++j != i)
61 memcpy(bytes + j * width, bytes + i * width, width);
64 return j + 1;
67 #endif /* QUNIQUE_H */