2
0
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:
Ben Pfaff
2010-05-03 12:30:37 -07:00
parent 836fad5e1a
commit 36c501fe78
2 changed files with 17 additions and 2 deletions

View File

@@ -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;
}

View File

@@ -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 */