]> granicus.if.org Git - vim/commitdiff
patch 7.4.783 v7.4.783
authorBram Moolenaar <Bram@vim.org>
Fri, 17 Jul 2015 11:22:51 +0000 (13:22 +0200)
committerBram Moolenaar <Bram@vim.org>
Fri, 17 Jul 2015 11:22:51 +0000 (13:22 +0200)
Problem:    copy_chars() and copy_spaces() are inefficient.
Solution:   Use memset() instead. (Dominique Pelle)

src/ex_getln.c
src/misc2.c
src/ops.c
src/proto/misc2.pro
src/screen.c
src/version.c

index 838354d56a60fc089c56e8e8d4eeff48868cd783..610ac862e6f5f0d25fc36b3ac2f59409993445c3 100644 (file)
@@ -250,7 +250,7 @@ getcmdline(firstc, count, indent)
     /* autoindent for :insert and :append */
     if (firstc <= 0)
     {
-       copy_spaces(ccline.cmdbuff, indent);
+       vim_memset(ccline.cmdbuff, ' ', indent);
        ccline.cmdbuff[indent] = NUL;
        ccline.cmdpos = indent;
        ccline.cmdspos = indent;
index 5aca2027b7fa6918160024af525fd30e89b61dbd..79bc379911fc9f5a750bd121374802e34b4a96a8 100644 (file)
@@ -1599,40 +1599,6 @@ strup_save(orig)
 }
 #endif
 
-/*
- * copy a space a number of times
- */
-    void
-copy_spaces(ptr, count)
-    char_u     *ptr;
-    size_t     count;
-{
-    size_t     i = count;
-    char_u     *p = ptr;
-
-    while (i--)
-       *p++ = ' ';
-}
-
-#if defined(FEAT_VISUALEXTRA) || defined(PROTO)
-/*
- * Copy a character a number of times.
- * Does not work for multi-byte characters!
- */
-    void
-copy_chars(ptr, count, c)
-    char_u     *ptr;
-    size_t     count;
-    int                c;
-{
-    size_t     i = count;
-    char_u     *p = ptr;
-
-    while (i--)
-       *p++ = c;
-}
-#endif
-
 /*
  * delete spaces at the end of a string
  */
index f7040c66ed8429a675d4466382eae83108a4b822..7ad8222e1c8a186286afabd4e3d4f85651aa12c3 100644 (file)
--- a/src/ops.c
+++ b/src/ops.c
@@ -442,8 +442,8 @@ shift_block(oap, amount)
            return;
        vim_memset(newp, NUL, (size_t)(bd.textcol + i + j + len));
        mch_memmove(newp, oldp, (size_t)bd.textcol);
-       copy_chars(newp + bd.textcol, (size_t)i, TAB);
-       copy_spaces(newp + bd.textcol + i, (size_t)j);
+       vim_memset(newp + bd.textcol, TAB, (size_t)i);
+       vim_memset(newp + bd.textcol + i, ' ', (size_t)j);
        /* the end */
        mch_memmove(newp + bd.textcol + i + j, bd.textstart, (size_t)len);
     }
@@ -535,7 +535,7 @@ shift_block(oap, amount)
        if (newp == NULL)
            return;
        mch_memmove(newp, oldp, (size_t)(verbatim_copy_end - oldp));
-       copy_spaces(newp + (verbatim_copy_end - oldp), (size_t)fill);
+       vim_memset(newp + (verbatim_copy_end - oldp), ' ', (size_t)fill);
        STRMOVE(newp + (verbatim_copy_end - oldp) + fill, non_white);
     }
     /* replace the line */
@@ -638,7 +638,7 @@ block_insert(oap, s, b_insert, bdp)
        oldp += offset;
 
        /* insert pre-padding */
-       copy_spaces(newp + offset, (size_t)spaces);
+       vim_memset(newp + offset, ' ', (size_t)spaces);
 
        /* copy the new text */
        mch_memmove(newp + offset + spaces, s, (size_t)s_len);
@@ -647,7 +647,7 @@ block_insert(oap, s, b_insert, bdp)
        if (spaces && !bdp->is_short)
        {
            /* insert post-padding */
-           copy_spaces(newp + offset + spaces, (size_t)(p_ts - spaces));
+           vim_memset(newp + offset + spaces, ' ', (size_t)(p_ts - spaces));
            /* We're splitting a TAB, don't copy it. */
            oldp++;
            /* We allowed for that TAB, remember this now */
@@ -1831,7 +1831,7 @@ op_delete(oap)
            /* copy up to deleted part */
            mch_memmove(newp, oldp, (size_t)bd.textcol);
            /* insert spaces */
-           copy_spaces(newp + bd.textcol,
+           vim_memset(newp + bd.textcol, ' ',
                                     (size_t)(bd.startspaces + bd.endspaces));
            /* copy the part after the deleted part */
            oldp += bd.textcol + bd.textlen;
@@ -2132,7 +2132,7 @@ op_replace(oap, c)
            mch_memmove(newp, oldp, (size_t)bd.textcol);
            oldp += bd.textcol + bd.textlen;
            /* insert pre-spaces */
-           copy_spaces(newp + bd.textcol, (size_t)bd.startspaces);
+           vim_memset(newp + bd.textcol, ' ', (size_t)bd.startspaces);
            /* insert replacement chars CHECK FOR ALLOCATED SPACE */
            /* -1/-2 is used for entering CR literally. */
            if (had_ctrl_v_cr || (c != '\r' && c != '\n'))
@@ -2146,11 +2146,11 @@ op_replace(oap, c)
                }
                else
 #endif
-                   copy_chars(newp + STRLEN(newp), (size_t)numc, c);
+                   vim_memset(newp + STRLEN(newp), c, (size_t)numc);
                if (!bd.is_short)
                {
                    /* insert post-spaces */
-                   copy_spaces(newp + STRLEN(newp), (size_t)bd.endspaces);
+                   vim_memset(newp + STRLEN(newp), ' ', (size_t)bd.endspaces);
                    /* copy the part after the changed part */
                    STRMOVE(newp + STRLEN(newp), oldp);
                }
@@ -2831,7 +2831,7 @@ op_change(oap)
                        mch_memmove(newp, oldp, (size_t)bd.textcol);
                        offset = bd.textcol;
 # ifdef FEAT_VIRTUALEDIT
-                       copy_spaces(newp + offset, (size_t)vpos.coladd);
+                       vim_memset(newp + offset, ' ', (size_t)vpos.coladd);
                        offset += vpos.coladd;
 # endif
                        mch_memmove(newp + offset, ins_text, (size_t)ins_len);
@@ -3272,11 +3272,11 @@ yank_copy_line(bd, y_idx)
                                                                      == NULL)
        return FAIL;
     y_current->y_array[y_idx] = pnew;
-    copy_spaces(pnew, (size_t)bd->startspaces);
+    vim_memset(pnew, ' ', (size_t)bd->startspaces);
     pnew += bd->startspaces;
     mch_memmove(pnew, bd->textstart, (size_t)bd->textlen);
     pnew += bd->textlen;
-    copy_spaces(pnew, (size_t)bd->endspaces);
+    vim_memset(pnew, ' ', (size_t)bd->endspaces);
     pnew += bd->endspaces;
     *pnew = NUL;
     return OK;
@@ -3690,7 +3690,7 @@ do_put(regname, dir, count, flags)
            mch_memmove(ptr, oldp, (size_t)bd.textcol);
            ptr += bd.textcol;
            /* may insert some spaces before the new text */
-           copy_spaces(ptr, (size_t)bd.startspaces);
+           vim_memset(ptr, ' ', (size_t)bd.startspaces);
            ptr += bd.startspaces;
            /* insert the new text */
            for (j = 0; j < count; ++j)
@@ -3701,12 +3701,12 @@ do_put(regname, dir, count, flags)
                /* insert block's trailing spaces only if there's text behind */
                if ((j < count - 1 || !shortline) && spaces)
                {
-                   copy_spaces(ptr, (size_t)spaces);
+                   vim_memset(ptr, ' ', (size_t)spaces);
                    ptr += spaces;
                }
            }
            /* may insert some spaces after the new text */
-           copy_spaces(ptr, (size_t)bd.endspaces);
+           vim_memset(ptr, ' ', (size_t)bd.endspaces);
            ptr += bd.endspaces;
            /* move the text after the cursor to the end of the line. */
            mch_memmove(ptr, oldp + bd.textcol + delcount,
@@ -4522,7 +4522,7 @@ do_join(count, insert_space, save_undo, use_formatoptions, setmark)
        if (spaces[t] > 0)
        {
            cend -= spaces[t];
-           copy_spaces(cend, (size_t)(spaces[t]));
+           vim_memset(cend, ' ', (size_t)(spaces[t]));
        }
        mark_col_adjust(curwin->w_cursor.lnum + t, (colnr_T)0, (linenr_T)-t,
                         (long)(cend - newp + spaces[t] - (curr - curr_start)));
index b2f72d8645dee64acbfa3043c5eba36842c3ee2e..f09ff33ac3c64c1de51f74698f564b69b7e35d8d 100644 (file)
@@ -37,8 +37,6 @@ char_u *vim_strsave_up __ARGS((char_u *string));
 char_u *vim_strnsave_up __ARGS((char_u *string, int len));
 void vim_strup __ARGS((char_u *p));
 char_u *strup_save __ARGS((char_u *orig));
-void copy_spaces __ARGS((char_u *ptr, size_t count));
-void copy_chars __ARGS((char_u *ptr, size_t count, int c));
 void del_trailing_spaces __ARGS((char_u *ptr));
 void vim_strncpy __ARGS((char_u *to, char_u *from, size_t len));
 void vim_strcat __ARGS((char_u *to, char_u *from, size_t tosize));
index 379b0f43346d0137ec2c1fbd48b73389daa56e16..3efce5f91079bf9646cb38ab21d2a75e6cde9a5c 100644 (file)
@@ -2833,7 +2833,7 @@ fill_foldcolumn(p, wp, closed, lnum)
     int                fdc = compute_foldcolumn(wp, 0);
 
     /* Init to all spaces. */
-    copy_spaces(p, (size_t)fdc);
+    vim_memset(p, ' ', (size_t)fdc);
 
     level = win_foldinfo.fi_level;
     if (level > 0)
index 4c90f1dc9e0a91f78e1bb682333e6e236ad5bb51..5a59adde65a4ce971c2041afda3429aa4f13e5ba 100644 (file)
@@ -741,6 +741,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    783,
 /**/
     782,
 /**/