mirror of
https://github.com/postgres/postgres.git
synced 2025-06-11 20:28:21 +03:00
Some optimizations by Volkan YAZICI <yazicivo@ttnet.net.tr>
This commit is contained in:
@ -34,7 +34,7 @@ inner_int_contains(ArrayType *a, ArrayType *b)
|
||||
j++;
|
||||
}
|
||||
else
|
||||
j++;
|
||||
break;
|
||||
|
||||
return (n == nb) ? TRUE : FALSE;
|
||||
}
|
||||
@ -76,13 +76,6 @@ ArrayType *
|
||||
inner_int_union(ArrayType *a, ArrayType *b)
|
||||
{
|
||||
ArrayType *r = NULL;
|
||||
int na,
|
||||
nb;
|
||||
int *da,
|
||||
*db,
|
||||
*dr;
|
||||
int i,
|
||||
j;
|
||||
|
||||
CHECKARRVALID(a);
|
||||
CHECKARRVALID(b);
|
||||
@ -94,31 +87,35 @@ inner_int_union(ArrayType *a, ArrayType *b)
|
||||
if (ARRISVOID(b))
|
||||
r = copy_intArrayType(a);
|
||||
|
||||
if (r)
|
||||
dr = ARRPTR(r);
|
||||
else
|
||||
if (!r)
|
||||
{
|
||||
na = ARRNELEMS(a);
|
||||
nb = ARRNELEMS(b);
|
||||
da = ARRPTR(a);
|
||||
db = ARRPTR(b);
|
||||
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])
|
||||
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)
|
||||
|
Reference in New Issue
Block a user