Re: [xml] Length xmlTextReaderConst... contents?



On Fri, Apr 11, 2008 at 01:10:01PM +0300, Andrew W. Nosenko wrote:
On Fri, Apr 11, 2008 at 8:58 AM, Ralf Junker <ralfjunker gmx de> wrote:
 I need the length to pass it to other functions which do not work on #0-terminated, but 
length-terminated string functions.

  actually no, the parser computed the lenght at some point for example
when interning the string.
  Have you actually tried to do a fine grained analysis, i really doubt
the strlen is taking any noticeable time compared to any useful processing
on top... beware of unchecked performance opinion :-)

Hmm...  What about following idea:

You may try to cache length of strings.
Const family of functions returns pointer to the "interned" string
from the internal Reader dictionary.  It relates to node and attribute
names.

You may prefill it with strings need for- or expected by you using
xmlTextReaderConstString().  In the same time you can calculate
strlen() and fill both (pointer to the interned string and its length)
into e.g. array.

After that you can both save time by eliminating strcmp() and using
direct pointer comparison, and avoid strlen() calls using lookup
inside this prefilled array.

If lookup fails (unknown node or attribute), then you may fallback to
the "usual" strlen() or just ignore unknown element depending of logic
of your application.

  Hum, most compilers optimize strlen() very well, your solution may actually
be more expensive than the speudo call as soon as your array includes more
than a dozen entry which sounds like a very short vocabulary.
  But yes this should return the interned strings,

Daniel

-- 
Red Hat Virtualization group http://redhat.com/virtualization/
Daniel Veillard      | virtualization library  http://libvirt.org/
veillard redhat com  | libxml GNOME XML XSLT toolkit  http://xmlsoft.org/
http://veillard.com/ | Rpmfind RPM search engine  http://rpmfind.net/



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]