Author: amassari
Date: Fri Feb 24 10:04:44 2006
New Revision: 380751

URL: http://svn.apache.org/viewcvs?rev=380751&view=rev
Log:
Improved performances of addRange

Modified:
    xerces/c/branches/xerces-2.7/src/xercesc/util/regx/RangeToken.cpp

Modified: xerces/c/branches/xerces-2.7/src/xercesc/util/regx/RangeToken.cpp
URL: 
http://svn.apache.org/viewcvs/xerces/c/branches/xerces-2.7/src/xercesc/util/regx/RangeToken.cpp?rev=380751&r1=380750&r2=380751&view=diff
==============================================================================
--- xerces/c/branches/xerces-2.7/src/xercesc/util/regx/RangeToken.cpp (original)
+++ xerces/c/branches/xerces-2.7/src/xercesc/util/regx/RangeToken.cpp Fri Feb 
24 10:04:44 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]

Reply via email to