Author: amassari
Date: Fri Feb 24 10:05:11 2006
New Revision: 380753
URL: http://svn.apache.org/viewcvs?rev=380753&view=rev
Log:
Improved performances of addRange
Modified:
xerces/c/trunk/src/xercesc/util/regx/RangeToken.cpp
Modified: xerces/c/trunk/src/xercesc/util/regx/RangeToken.cpp
URL:
http://svn.apache.org/viewcvs/xerces/c/trunk/src/xercesc/util/regx/RangeToken.cpp?rev=380753&r1=380752&r2=380753&view=diff
==============================================================================
--- xerces/c/trunk/src/xercesc/util/regx/RangeToken.cpp (original)
+++ xerces/c/trunk/src/xercesc/util/regx/RangeToken.cpp Fri Feb 24 10:05:11 2006
@@ -191,14 +191,42 @@
expand(2);
}
- if (fRanges[fElemCount-1] >= val1)
- fSorted = false;
+ if(fSorted && fRanges[fElemCount-1] >= val1)
+ {
+ for (int i = 0; i < (int)fElemCount; i +=2)
+ {
+ // check if this range is already part of this one
+ if (fRanges[i] <= val1 && fRanges[i+1] >= val2)
+ break;
+ // or if the new one extends the old one
+ else if(fRanges[i]==val1 && fRanges[i+1] < val2)
+ {
+ fRanges[i+1]=val2;
+ break;
+ }
+ else if (fRanges[i] > val1 ||
+ (fRanges[i]==val1 && fRanges[i+1] > val2))
+ {
+ for(int j=fElemCount-1;j>=i;j--)
+ fRanges[j+2]=fRanges[j];
+ fRanges[i] = val1;
+ fRanges[i+1] = val2;
+ fElemCount += 2;
+ break;
+ }
+ }
+ }
+ else
+ {
+ if (fRanges[fElemCount-1] >= val1)
+ fSorted = false;
- fRanges[fElemCount++] = val1;
- fRanges[fElemCount++] = val2;
+ fRanges[fElemCount++] = val1;
+ fRanges[fElemCount++] = val2;
- if (!fSorted) {
- sortRanges();
+ if (!fSorted) {
+ sortRanges();
+ }
}
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]