Commit f9b5fa2d authored by William M. Brack's avatar William M. Brack
Browse files

enhanced xmlRegStateAddTrans to check if transition is already present

* xmlregexp.c: enhanced xmlRegStateAddTrans to check if transition
  is already present and, if so, to ignore the request to add it.
  This has a very dramatic effect on memory requirements as well
  as efficiency.  It also fixes bug 141762.
parent 6d38c750
Mon May 10 15:49:22 HKT 2004 William Brack <wbrack@mmm.com.hk>
* xmlregexp.c: enhanced xmlRegStateAddTrans to check if transition
is already present and, if so, to ignore the request to add it.
This has a very dramatic effect on memory requirements as well
as efficiency. It also fixes bug 141762.
Sun May 9 20:40:59 CEST 2004 Daniel Veillard <daniel@veillard.com>
 
* Makefile.am python/tests/Makefile.am python/tests/tstLastError.py:
......
......@@ -1182,6 +1182,9 @@ static void
xmlRegStateAddTrans(xmlRegParserCtxtPtr ctxt, xmlRegStatePtr state,
xmlRegAtomPtr atom, xmlRegStatePtr target,
int counter, int count) {
int nrtrans;
if (state == NULL) {
ERROR("add state: state is NULL");
return;
......@@ -1190,6 +1193,25 @@ xmlRegStateAddTrans(xmlRegParserCtxtPtr ctxt, xmlRegStatePtr state,
ERROR("add state: target is NULL");
return;
}
/*
* Other routines follow the philosophy 'When in doubt, add a transition'
* so we check here whether such a transition is already present and, if
* so, silently ignore this request.
*/
for (nrtrans=0; nrtrans<state->nbTrans; nrtrans++) {
if ((state->trans[nrtrans].atom == atom) &&
(state->trans[nrtrans].to == target->no) &&
(state->trans[nrtrans].counter == counter) &&
(state->trans[nrtrans].count == count)) {
#ifdef DEBUG_REGEXP_GRAPH
printf("Ignoring duplicate transition from %d to %d\n",
state->no, target->no);
#endif
return;
}
}
if (state->maxTrans == 0) {
state->maxTrans = 4;
state->trans = (xmlRegTrans *) xmlMalloc(state->maxTrans *
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment