mirror of
https://github.com/neovim/neovim.git
synced 2025-09-28 14:08:32 +00:00
garray: refactor and optimize ga_concat
I've checked all uses of ga_concat in the codebase: - ex_cmds2.c - ex_getln.c - eval.c - message.c - regexp-nfa.c - term.c - spell.c None of them concats the garray with itself. This makes it safe to use the faster memcpy() instead of memmove(). This change was also documented.
This commit is contained in:

committed by
Thiago de Arruda

parent
767f0fae0b
commit
eea98c4d3b
12
src/garray.c
12
src/garray.c
@@ -142,15 +142,19 @@ char_u* ga_concat_strings(const garray_T *gap)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Concatenate a string to a growarray which contains characters.
|
/// Concatenate a string to a growarray which contains characters.
|
||||||
/// Note: Does NOT copy the NUL at the end!
|
///
|
||||||
|
/// WARNING:
|
||||||
|
/// - Does NOT copy the NUL at the end!
|
||||||
|
/// - The parameter may not overlap with the growing array
|
||||||
///
|
///
|
||||||
/// @param gap
|
/// @param gap
|
||||||
/// @param s
|
/// @param s
|
||||||
void ga_concat(garray_T *gap, char_u *s)
|
void ga_concat(garray_T *gap, const char_u *restrict s)
|
||||||
{
|
{
|
||||||
int len = (int)STRLEN(s);
|
int len = (int)strlen((char *) s);
|
||||||
ga_grow(gap, len);
|
ga_grow(gap, len);
|
||||||
memmove((char *)gap->ga_data + gap->ga_len, s, (size_t)len);
|
char *data = gap->ga_data;
|
||||||
|
memcpy(data + gap->ga_len, s, (size_t) len);
|
||||||
gap->ga_len += len;
|
gap->ga_len += len;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -24,7 +24,7 @@ char_u *ga_concat_strings_sep(const garray_T *gap, const char *sep)
|
|||||||
FUNC_ATTR_NONNULL_RET;
|
FUNC_ATTR_NONNULL_RET;
|
||||||
char_u *ga_concat_strings(const garray_T *gap) FUNC_ATTR_NONNULL_RET;
|
char_u *ga_concat_strings(const garray_T *gap) FUNC_ATTR_NONNULL_RET;
|
||||||
void ga_remove_duplicate_strings(garray_T *gap);
|
void ga_remove_duplicate_strings(garray_T *gap);
|
||||||
void ga_concat(garray_T *gap, char_u *s);
|
void ga_concat(garray_T *gap, const char_u *restrict s);
|
||||||
void ga_append(garray_T *gap, char c);
|
void ga_append(garray_T *gap, char c);
|
||||||
void append_ga_line(garray_T *gap);
|
void append_ga_line(garray_T *gap);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user