#include "postgres.h"#include "catalog/pg_type.h"#include "_int.h"
Go to the source code of this file.
Functions | |
| bool | inner_int_contains (ArrayType *a, ArrayType *b) |
| bool | inner_int_overlap (ArrayType *a, ArrayType *b) |
| ArrayType * | inner_int_union (ArrayType *a, ArrayType *b) |
| ArrayType * | inner_int_inter (ArrayType *a, ArrayType *b) |
| void | rt__int_size (ArrayType *a, float *size) |
| bool | isort (int32 *a, int len) |
| ArrayType * | new_intArrayType (int num) |
| ArrayType * | resize_intArrayType (ArrayType *a, int num) |
| ArrayType * | copy_intArrayType (ArrayType *a) |
| int | internal_size (int *a, int len) |
| ArrayType * | _int_unique (ArrayType *r) |
| void | gensign (BITVEC sign, int *a, int len) |
| int32 | intarray_match_first (ArrayType *a, int32 elem) |
| ArrayType * | intarray_add_elem (ArrayType *a, int32 elem) |
| ArrayType * | intarray_concat_arrays (ArrayType *a, ArrayType *b) |
| ArrayType * | int_to_intset (int32 n) |
| int | compASC (const void *a, const void *b) |
| int | compDESC (const void *a, const void *b) |
Definition at line 293 of file _int_tool.c.
References ARRNELEMS, ARRPTR, and resize_intArrayType().
Referenced by g_int_union(), inner_int_union(), intset_subtract(), intset_union_elem(), and uniq().
{
int *tmp,
*dr,
*data;
int num = ARRNELEMS(r);
if (num < 2)
return r;
data = tmp = dr = ARRPTR(r);
while (tmp - data < num)
{
if (*tmp != *dr)
*(++dr) = *tmp++;
else
tmp++;
}
return resize_intArrayType(r, dr + 1 - ARRPTR(r));
}
| int compASC | ( | const void * | a, | |
| const void * | b | |||
| ) |
| int compDESC | ( | const void * | a, | |
| const void * | b | |||
| ) |
Definition at line 265 of file _int_tool.c.
References ARRNELEMS, ARRPTR, and new_intArrayType().
Referenced by g_int_picksplit(), and inner_int_union().
| void gensign | ( | BITVEC | sign, | |
| int * | a, | |||
| int | len | |||
| ) |
Definition at line 13 of file _int_tool.c.
References ARRNELEMS, ARRPTR, i, and TRUE.
Referenced by _int_contains(), and g_int_consistent().
Definition at line 134 of file _int_tool.c.
References ARRISEMPTY, ARRNELEMS, ARRPTR, i, Min, new_intArrayType(), pfree(), and resize_intArrayType().
Referenced by _int_inter(), and g_int_picksplit().
{
ArrayType *r;
int na,
nb;
int *da,
*db,
*dr;
int i,
j,
k;
if (ARRISEMPTY(a) || ARRISEMPTY(b))
return new_intArrayType(0);
na = ARRNELEMS(a);
nb = ARRNELEMS(b);
da = ARRPTR(a);
db = ARRPTR(b);
r = new_intArrayType(Min(na, nb));
dr = ARRPTR(r);
i = j = k = 0;
while (i < na && j < nb)
{
if (da[i] < db[j])
i++;
else if (da[i] == db[j])
{
if (k == 0 || dr[k - 1] != db[j])
dr[k++] = db[j];
i++;
j++;
}
else
j++;
}
if (k == 0)
{
pfree(r);
return new_intArrayType(0);
}
else
return resize_intArrayType(r, k);
}
Definition at line 48 of file _int_tool.c.
References ARRNELEMS, ARRPTR, and i.
Referenced by _int_overlap(), and g_int_consistent().
Definition at line 77 of file _int_tool.c.
References _int_unique(), ARRISEMPTY, ARRNELEMS, ARRPTR, CHECKARRVALID, copy_intArrayType(), i, new_intArrayType(), and resize_intArrayType().
Referenced by _int_union(), g_int_penalty(), and g_int_picksplit().
{
ArrayType *r = NULL;
CHECKARRVALID(a);
CHECKARRVALID(b);
if (ARRISEMPTY(a) && ARRISEMPTY(b))
return new_intArrayType(0);
if (ARRISEMPTY(a))
r = copy_intArrayType(b);
if (ARRISEMPTY(b))
r = copy_intArrayType(a);
if (!r)
{
int na = ARRNELEMS(a),
nb = ARRNELEMS(b);
int *da = ARRPTR(a),
*db = ARRPTR(b);
int i,
j,
*dr;
r = new_intArrayType(na + nb);
dr = ARRPTR(r);
/* union */
i = j = 0;
while (i < na && j < nb)
{
if (da[i] == db[j])
{
*dr++ = da[i++];
j++;
}
else if (da[i] < db[j])
*dr++ = da[i++];
else
*dr++ = db[j++];
}
while (i < na)
*dr++ = da[i++];
while (j < nb)
*dr++ = db[j++];
r = resize_intArrayType(r, dr - ARRPTR(r));
}
if (ARRNELEMS(r) > 1)
r = _int_unique(r);
return r;
}
Definition at line 378 of file _int_tool.c.
References ARRPTR, and new_intArrayType().
Referenced by intset().
{
ArrayType *result;
int32 *aa;
result = new_intArrayType(1);
aa = ARRPTR(result);
aa[0] = n;
return result;
}
Definition at line 344 of file _int_tool.c.
References ARRNELEMS, ARRPTR, CHECKARRVALID, and new_intArrayType().
Referenced by intarray_push_elem(), and intset_union_elem().
{
ArrayType *result;
int32 *r;
int32 c;
CHECKARRVALID(a);
c = ARRNELEMS(a);
result = new_intArrayType(c + 1);
r = ARRPTR(result);
if (c > 0)
memcpy(r, ARRPTR(a), c * sizeof(int32));
r[c] = elem;
return result;
}
Definition at line 361 of file _int_tool.c.
References ARRNELEMS, ARRPTR, CHECKARRVALID, and new_intArrayType().
Referenced by intarray_push_array().
{
ArrayType *result;
int32 ac = ARRNELEMS(a);
int32 bc = ARRNELEMS(b);
CHECKARRVALID(a);
CHECKARRVALID(b);
result = new_intArrayType(ac + bc);
if (ac)
memcpy(ARRPTR(result), ARRPTR(a), ac * sizeof(int32));
if (bc)
memcpy(ARRPTR(result) + ac, ARRPTR(b), bc * sizeof(int32));
return result;
}
Definition at line 328 of file _int_tool.c.
References ARRNELEMS, ARRPTR, CHECKARRVALID, and i.
Referenced by idx().
{
int32 *aa,
c,
i;
CHECKARRVALID(a);
c = ARRNELEMS(a);
aa = ARRPTR(a);
for (i = 0; i < c; i++)
if (aa[i] == elem)
return (i + 1);
return 0;
}
| int internal_size | ( | int * | a, | |
| int | len | |||
| ) |
Definition at line 277 of file _int_tool.c.
References i.
Referenced by g_int_decompress().
{
int i,
size = 0;
for (i = 0; i < len; i += 2)
{
if (!i || a[i] != a[i - 1]) /* do not count repeated range */
size += a[i + 1] - a[i] + 1;
}
return size;
}
Definition at line 189 of file _int_tool.c.
References cur.
{
int32 cur,
prev;
int32 *pcur,
*pprev,
*end;
bool r = FALSE;
/*
* We use a simple insertion sort. While this is O(N^2) in the worst
* case, it's quite fast if the input is already sorted or nearly so.
* Also, for not-too-large inputs it's faster than more complex methods
* anyhow.
*/
end = a + len;
for (pcur = a + 1; pcur < end; pcur++)
{
cur = *pcur;
for (pprev = pcur - 1; pprev >= a; pprev--)
{
prev = *pprev;
if (prev <= cur)
{
if (prev == cur)
r = TRUE;
break;
}
pprev[1] = prev;
}
pprev[1] = cur;
}
return r;
}
| ArrayType* new_intArrayType | ( | int | num | ) |
Definition at line 226 of file _int_tool.c.
References ARR_DIMS, ARR_ELEMTYPE, ARR_LBOUND, ARR_NDIM, ARR_OVERHEAD_NONULLS, ArrayType::dataoffset, palloc0(), and SET_VARSIZE.
Referenced by copy_intArrayType(), g_int_decompress(), g_int_union(), inner_int_inter(), inner_int_union(), int_to_intset(), intarray_add_elem(), intarray_concat_arrays(), intset_subtract(), and subarray().
{
ArrayType *r;
int nbytes = ARR_OVERHEAD_NONULLS(1) + sizeof(int) * num;
r = (ArrayType *) palloc0(nbytes);
SET_VARSIZE(r, nbytes);
ARR_NDIM(r) = 1;
r->dataoffset = 0; /* marker for no null bitmap */
ARR_ELEMTYPE(r) = INT4OID;
ARR_DIMS(r)[0] = num;
ARR_LBOUND(r)[0] = 1;
return r;
}
Definition at line 244 of file _int_tool.c.
References ARR_DATA_OFFSET, ARR_DIMS, ARR_NDIM, ARRNELEMS, i, repalloc(), and SET_VARSIZE.
Referenced by _int_unique(), g_int_compress(), inner_int_inter(), inner_int_union(), intarray_del_elem(), and intset_subtract().
{
int nbytes = ARR_DATA_OFFSET(a) + sizeof(int) * num;
int i;
if (num == ARRNELEMS(a))
return a;
a = (ArrayType *) repalloc(a, nbytes);
SET_VARSIZE(a, nbytes);
/* usually the array should be 1-D already, but just in case ... */
for (i = 0; i < ARR_NDIM(a); i++)
{
ARR_DIMS(a)[i] = num;
num = 1;
}
return a;
}
| void rt__int_size | ( | ArrayType * | a, | |
| float * | size | |||
| ) |
Definition at line 182 of file _int_tool.c.
References ARRNELEMS.
Referenced by g_int_penalty(), and g_int_picksplit().
{
*size = (float) ARRNELEMS(a);
}
1.7.1