[Home] [By Thread] [By Date] [Recent Entries]


> Except that it doesn't show that, because every entity expansion
> involves copying the following text forward.

Since you have to look at the char, copying it back would go through the
mem cache.  I figured that was cheaper than saying (if buf != src) first.
Of course, the whole routine should be optimized by putting
   if (memchr(buff, '&', size) == NULL) return size;

> I'd be astonished if that
> wins compared with delivering expansions SAX-style. I'd even be
> surprised if it wins against non-in-place expansion to a separate
> buffer (assuming the copy was optimized away for the no entity refs
> case).

I don't know what to say here.  Have you done much "to the metal" coding
in C/C++ kinds of things?  Imagine an embedded device, for example:  no
need for multiple buffers.  Imagine streaming the output -- no need for
multiple system calls, computing total length, etc.  The input is all in
one buffer -- how *can* it be easier and more efficient to split it up?
Surely at times you wished SAX would guarantee one call/chardata?  But
even if not, don't think of SAX.  Think of smaller faster things.

Hope this helps.
	/r$



Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member