mirror of
https://github.com/openvswitch/ovs
synced 2025-10-29 15:28:56 +00:00
dynamic-string: Optimize ds_put_char().
A qprof profile showed ds_put_char() and ds_put_uninit() as 4% of total runtime. This commit inlines the common case, which reduces them to 1% total.
This commit is contained in:
@@ -66,7 +66,7 @@ ds_put_uninit(struct ds *ds, size_t n)
|
||||
}
|
||||
|
||||
void
|
||||
ds_put_char(struct ds *ds, char c)
|
||||
ds_put_char__(struct ds *ds, char c)
|
||||
{
|
||||
*ds_put_uninit(ds, 1) = c;
|
||||
}
|
||||
|
||||
@@ -39,7 +39,7 @@ void ds_clear(struct ds *);
|
||||
void ds_truncate(struct ds *, size_t new_length);
|
||||
void ds_reserve(struct ds *, size_t min_length);
|
||||
char *ds_put_uninit(struct ds *, size_t n);
|
||||
void ds_put_char(struct ds *, char);
|
||||
static inline void ds_put_char(struct ds *, char);
|
||||
void ds_put_utf8(struct ds *, int uc);
|
||||
void ds_put_char_multiple(struct ds *, char, size_t n);
|
||||
void ds_put_buffer(struct ds *, const char *, size_t n);
|
||||
@@ -63,5 +63,20 @@ void ds_swap(struct ds *, struct ds *);
|
||||
|
||||
int ds_last(const struct ds *);
|
||||
void ds_chomp(struct ds *, int c);
|
||||
|
||||
/* Inline functions. */
|
||||
|
||||
void ds_put_char__(struct ds *, char);
|
||||
|
||||
static inline void
|
||||
ds_put_char(struct ds *ds, char c)
|
||||
{
|
||||
if (ds->length < ds->allocated) {
|
||||
ds->string[ds->length++] = c;
|
||||
ds->string[ds->length] = '\0';
|
||||
} else {
|
||||
ds_put_char__(ds, c);
|
||||
}
|
||||
}
|
||||
|
||||
#endif /* dynamic-string.h */
|
||||
|
||||
Reference in New Issue
Block a user