diff options
author | Daniel Veillard <veillard@src.gnome.org> | 2005-07-20 13:46:00 +0000 |
---|---|---|
committer | Daniel Veillard <veillard@src.gnome.org> | 2005-07-20 13:46:00 +0000 |
commit | 0a119ebe61fd211b5dd11ecac83020481999a3b2 (patch) | |
tree | 9c7b4f9efb90e8ed9e1c4b56a5ecf6eca20e03e4 /parser.c | |
parent | 77005e6ff0426ae3cfefdcfb5796f29a8e83a83b (diff) | |
download | android_external_libxml2-0a119ebe61fd211b5dd11ecac83020481999a3b2.tar.gz android_external_libxml2-0a119ebe61fd211b5dd11ecac83020481999a3b2.tar.bz2 android_external_libxml2-0a119ebe61fd211b5dd11ecac83020481999a3b2.zip |
an optimization of the char data inner loop, can gain up to 10% in pure
* parser.c: an optimization of the char data inner loop,
can gain up to 10% in pure SAX2 parsing speed
* xmlschemas.c: applied patch from Kupriyanov Anatolij fixing
a bug in XML Schemas facet comparison #310893
Daniel
Diffstat (limited to 'parser.c')
-rw-r--r-- | parser.c | 51 |
1 files changed, 43 insertions, 8 deletions
@@ -3166,6 +3166,45 @@ xmlParsePubidLiteral(xmlParserCtxtPtr ctxt) { } void xmlParseCharDataComplex(xmlParserCtxtPtr ctxt, int cdata); + +/* + * used for the test in the inner loop of the char data testing + */ +static const unsigned char test_char_data[256] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9, CR/LF separated */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x00, 0x27, /* & */ + 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, + 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, + 0x38, 0x39, 0x3A, 0x3B, 0x00, 0x3D, 0x3E, 0x3F, /* < */ + 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, + 0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, + 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, + 0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x00, 0x5E, 0x5F, /* ] */ + 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, + 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, + 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, + 0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* non-ascii */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}; + /** * xmlParseCharData: * @ctxt: an XML parser context @@ -3237,14 +3276,10 @@ get_more_space: get_more: ccol = ctxt->input->col; - while (((*in > ']') && (*in <= 0x7F)) || - ((*in > '&') && (*in < '<')) || - ((*in > '<') && (*in < ']')) || - ((*in >= 0x20) && (*in < '&')) || - (*in == 0x09)) { - in++; - ccol++; - } + while (test_char_data[*in]) { + in++; + ccol++; + } ctxt->input->col = ccol; if (*in == 0xA) { ctxt->input->line++; ctxt->input->col = 1; |