[jdom-commits] CVS update: jdom/src/java/org/jdom

jhunter at cvs.jdom.org jhunter at cvs.jdom.org
Mon Dec 18 22:58:37 PST 2000


Date:	Tuesday December 19, 2000 @ 6:58
Author:	jhunter

Update of /home/cvspublic/jdom/src/java/org/jdom
In directory www.nmemonix.com:/tmp/cvs-serv1590

Modified Files:
	Verifier.java 
Log Message:
Improved the Verifier.isXML*() methods to operate much faster.  Calling 
isXMLLetter on random chars in the range 0-255 shows about a 4x speedup.  
The basic logic is to change:

if (c >= 0x0041 && c <= 0x005A) return true;
if (c >= 0x0061 && c <= 0x007A) return true;
if (c >= 0x00C0 && c <= 0x00D6) return true;

into:

if (c < 0x0041) return false;  if (c <= 0x005a) return true;
if (c < 0x0061) return false;  if (c <= 0x007A) return true;
if (c < 0x00C0) return false;  if (c <= 0x00D6) return true;

This way we short circuit as soon as the check has passed the char's value.
The old logic was fast for "true" results but was a slow exhaustive search 
for "false" results.  That caused a problem because many calls are like:

return (isXMLLetter(c) || isXMLDigit(c))

so "false" results are not uncommon.

We could get REALLY fast results by creating a lookup table beforehand and 
accessing lookup[c].  Timings show that 2x to 12x faster still (faster for
higher unicode values).  The table can store int values where bits 
represent if that char is appropriate for various uses (start letter, 
name letter, etc).  Then all calls are a straight lookup.  To save 
memory we could create an int[256] table until a character came in 
above that, at which point we'd populate the full table, so for 
non-Unicode use it'd only eat 256 ints of memory (1K).  Timings show
it takes 80ms to create a 64K table with one bit depth.  The lookup 
isn't our bottleneck right now though, charAt() and indexOf() are, so 
this is just a cool idea for the future.

-jh-


===================================================================
File: Verifier.java    	Status: Up-to-date

   Working revision:	1.17	Tue Dec 19 06:58:36 2000
   Repository revision:	1.17	/home/cvspublic/jdom/src/java/org/jdom/Verifier.java,v

   Existing Tags:
	start                    	(revision: 1.1.1.1)
	jdom                     	(branch: 1.1.1)




More information about the jdom-commits mailing list