Brad Beveridge wrote:
> > I wonder how you create a new line. Using the old mechanism you mostly
> > end up reallocating the line at the next insert. Allocating a bit of
> > room to anticipate further appends would be more efficient.
> I'm sorry, I don't understand quite what you mean with that comment.
> Do you mean "if you only used ml_append_string, how do new lines ever
> get created?" If you do mean that, then the answer is: new lines need
> to be created by an upper level function. I have an upper level
> "append_char" function that is more or less:
> void append_char (buf, char) {
> static uchar string[2] = {0};
> curbuf = buf;
> if (char == '\n')
> ml_append // create a new line
> else
> {
> string[0] = char;
> ml_append_string (string)
> .......
> The reason that I didn't do new line creation in append_string is that
> you would need to check all incoming strings for newlines, the upper
> level layers can better do this check because they have more
> information about the incoming string - they could know it will never
> contain newlines.
I understand. It would be a bit more efficient if the new, empty line
that you add when a newline is encountered already has room for a
certain number of characters.
> > Also, for appending to a different line than before you copy the line
> > twice. You can avoid that by using vim_strnsave() instead of
> > vim_strsave() and reserving space for new characters right away.
>
> Yes, this is a slight inefficiency. The main reason that I did this
> was that I wanted all the code to do with re-allocation in the same
> place, ie the next if block. Looking at the code again now, the
> solution is probably to not copy in the "cache miss" code, where we
> flush - just do
> curbuf->b_ml.ml_line_ptr = ml_get(lnum);
I suppose that should work (didn't look at it carefully).
I might have a look later if this code can be used in certain
situations. That should make some operations work faster, e.g. pasting
a large chunk of text into a terminal emulator.
--
Some of the well know MS-Windows errors:
EMULTI Multitasking attempted, system confused
EKEYBOARD Keyboard locked, try getting out of this one!
EXPLAIN Unexplained error, please tell us what happened
EFUTURE Reserved for our future mistakes
/// Bram Moolenaar -- [EMAIL PROTECTED] -- http://www.Moolenaar.net \\\
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\ download, build and distribute -- http://www.A-A-P.org ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///