Lists Home |
Date Index |
> 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
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.