mirror of
https://gitlab.gnome.org/GNOME/libxml2.git
synced 2025-03-13 20:58:16 +03:00
Speed up htmlTagLookup
Switch to binary search. This is the first time bsearch is used in the libxml2 code base. But it's a standard library function since C89 and should be portable.
This commit is contained in:
parent
ad101bb5b5
commit
b25acce858
20
HTMLparser.c
20
HTMLparser.c
@ -1269,6 +1269,14 @@ htmlInitAutoClose(void) {
|
||||
htmlStartCloseIndexinitialized = 1;
|
||||
}
|
||||
|
||||
static int
|
||||
htmlCompareTags(const void *key, const void *member) {
|
||||
const char *tag = (const char *) key;
|
||||
const htmlElemDesc *desc = (const htmlElemDesc *) member;
|
||||
|
||||
return(strcmp(tag, desc->name));
|
||||
}
|
||||
|
||||
/**
|
||||
* htmlTagLookup:
|
||||
* @tag: The tag name in lowercase
|
||||
@ -1279,14 +1287,12 @@ htmlInitAutoClose(void) {
|
||||
*/
|
||||
const htmlElemDesc *
|
||||
htmlTagLookup(const xmlChar *tag) {
|
||||
unsigned int i;
|
||||
if (tag == NULL)
|
||||
return(NULL);
|
||||
|
||||
for (i = 0; i < (sizeof(html40ElementTable) /
|
||||
sizeof(html40ElementTable[0]));i++) {
|
||||
if (!xmlStrcasecmp(tag, BAD_CAST html40ElementTable[i].name))
|
||||
return((htmlElemDescPtr) &html40ElementTable[i]);
|
||||
}
|
||||
return(NULL);
|
||||
return((const htmlElemDesc *) bsearch(tag, html40ElementTable,
|
||||
sizeof(html40ElementTable) / sizeof(htmlElemDesc),
|
||||
sizeof(htmlElemDesc), htmlCompareTags));
|
||||
}
|
||||
|
||||
/**
|
||||
|
Loading…
x
Reference in New Issue
Block a user