[PATCH] Move charsets-in-region to C

Aidan Kehoe kehoea at parhasard.net
Wed Nov 15 04:40:36 EST 2006


 Ar an cúigiú lá déag de mí na Samhain, scríobh stephen at xemacs.org: 

 > Wouldn't it be faster to code this in terms of Bytebpos (whichever
 > groks the gap):

Sure; which one groks the gap, though? :-)

 >     Ibyte *pos, *stop;                /* initialize these */
 >     while (pos < stop)
 >       {
 >         if (0 == charsets[*pos - MIN_LEADING_BYTE])
 >           {
 >             charsets[*pos - MIN_LEADING_BYTE];
 >             res = Fcons (XCHARSET_NAME(charset_by_leading_byte(*pos)), res);
 >           }
 >         INC_IBYTE_PTR (pos);
 >       }
 > 
 > (I originally thought it would be clearer but actually looking at it
 > it seems to be a tossup.)  I think it's worth optimizing because (eg)
 > it would some of the code in latin-unity clearer and easier to
 > generalize if we could use this (it was way too slow when it was in
 > Lisp).  (Of course your code is plenty fast, but if there's an easy
 > optimization it's probably worth it.)

Faster still in the normal case would be a combination of the
BUFFER_TEXT_LOOP macro in buffer.h and skip_ascii() in text.c. 

 > It also occurs to me that we should have a map-text iterator to
 > replace idioms like
 > 
 >   (save-excursion
 >     (while condition
 >       (do-something (char-after (point)))
 >       (forward-char 1)))
 > 
 > Do you think that's overkill?

Hmm, a little. Tangentally I was considering implementing
with-string-as-buffer-text in C for the sake of charsets-in-string and
decode-coding-string , but almost nothing else appears to use them, so it
may not be worth the maintenance. 

-- 
Santa Maradona, priez pour moi!



More information about the XEmacs-Patches mailing list