2 * contrib/intarray/_int_tool.c
13/* arguments are assumed sorted & unique-ified */
31 while (
i < na &&
j < nb)
35 else if (da[
i] == db[
j])
42 break;
/* db[j] is not in da */
48/* arguments are assumed sorted */
65 while (
i < na &&
j < nb)
69 else if (da[
i] == db[
j])
108 while (
i < na &&
j < nb)
115 else if (da[
i] < db[
j])
159 while (
i < na &&
j < nb)
163 else if (da[
i] == db[
j])
165 if (k == 0 || dr[k - 1] != db[
j])
189/* comparison function for isort() and _int_unique() */
198 /* compare for ascending order */
214 #define ST_SORT isort
215 #define ST_ELEMENT_TYPE int32
216 #define ST_COMPARE(a, b, ascending) isort_cmp(a, b, ascending)
217 #define ST_COMPARE_ARG_TYPE void
222/* Create a new int array with room for "num" elements */
229 /* if no elements, return a zero-dimensional array */
243 r->
dataoffset = 0;
/* marker for no null bitmap */
257 /* if no elements, return a zero-dimensional array */
273 /* usually the array should be 1-D already, but just in case ... */
293/* num for compressed key */
300 for (
i = 0;
i <
len;
i += 2)
302 if (!
i ||
a[
i] !=
a[
i - 1])
/* do not count repeated range */
306 if (size > (
int64) INT_MAX || size < (
int64) INT_MIN)
307 return -1;
/* overflow */
311/* unique-ify elements of r in-place ... r must be sorted already */
316 bool ascending =
true;
329 /* we assume that the sign vector is previously zeroed */
347 for (
i = 0;
i <
c;
i++)
#define ARR_OVERHEAD_NONULLS(ndims)
#define ARR_DATA_OFFSET(a)
ArrayType * construct_empty_array(Oid elmtype)
Assert(PointerIsAligned(start, uint64))
#define HASH(sign, val, siglen)
void * repalloc(void *pointer, Size size)
void pfree(void *pointer)
void * palloc0(Size size)
static size_t qunique_arg(void *array, size_t elements, size_t width, int(*compare)(const void *, const void *, void *), void *arg)
static void SET_VARSIZE(void *PTR, Size len)