1
0
mirror of https://gitlab.gnome.org/GNOME/libxml2.git synced 2025-08-07 06:43:02 +03:00

xmlXPathNodeSetSort now uses Shell's sorting algorithm

Fixed whitespace handling in xmlXPathStringEvalNumber
This commit is contained in:
Bjorn Reese
2001-02-18 16:49:41 +00:00
parent 142adbfa3d
commit 081543fd01

26
xpath.c
View File

@@ -592,18 +592,26 @@ xmlXPathCmpNodes(xmlNodePtr node1, xmlNodePtr node2) {
*/ */
void void
xmlXPathNodeSetSort(xmlNodeSetPtr set) { xmlXPathNodeSetSort(xmlNodeSetPtr set) {
int i, j; int i, j, incr, len, rc;
xmlNodePtr tmp; xmlNodePtr tmp;
if (set == NULL) if (set == NULL)
return; return;
for (i = 0;i < set->nodeNr -1;i++) { /* Use Shell's sort to sort the node-set */
for (j = i + 1; j < set->nodeNr; j++) { len = set->nodeNr;
if (xmlXPathCmpNodes(set->nodeTab[i], set->nodeTab[j]) == -1) { for (incr = len / 2; incr > 0; incr /= 2) {
tmp = set->nodeTab[i]; for (i = incr; i < len; i++) {
set->nodeTab[i] = set->nodeTab[j]; j = i - incr;
set->nodeTab[j] = tmp; while (j >= 0) {
rc = xmlXPathCmpNodes(set->nodeTab[j], set->nodeTab[j + incr]);
if (rc != 1 && rc != -2) {
tmp = set->nodeTab[j];
set->nodeTab[j] = set->nodeTab[j + incr];
set->nodeTab[j + incr] = tmp;
j -= incr;
} else
break;
} }
} }
} }
@@ -4733,7 +4741,7 @@ xmlXPathStringEvalNumber(const xmlChar *str) {
int ok = 0; int ok = 0;
int isneg = 0; int isneg = 0;
while (*cur == ' ') cur++; while (IS_BLANK(*cur)) cur++;
if ((*cur != '.') && ((*cur < '0') || (*cur > '9')) && (*cur != '-')) { if ((*cur != '.') && ((*cur < '0') || (*cur > '9')) && (*cur != '-')) {
return(xmlXPathNAN); return(xmlXPathNAN);
} }
@@ -4757,7 +4765,7 @@ xmlXPathStringEvalNumber(const xmlChar *str) {
cur++; cur++;
} }
} }
while (*cur == ' ') cur++; while (IS_BLANK(*cur)) cur++;
if (*cur != 0) return(xmlXPathNAN); if (*cur != 0) return(xmlXPathNAN);
if (isneg) ret = -ret; if (isneg) ret = -ret;
return(ret); return(ret);