Skip to content

Commit ca77394

Browse files
authored
Merge pull request #597 from casperisfine/opt-fbuffer-inc-capa
Optimize `fbuffer_inc_capa`
2 parents 9513e46 + a7206bf commit ca77394

File tree

1 file changed

+16
-10
lines changed

1 file changed

+16
-10
lines changed

ext/json/ext/fbuffer/fbuffer.h

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,10 @@ static FBuffer *fbuffer_dup(FBuffer *fb);
6666
static VALUE fbuffer_to_s(FBuffer *fb);
6767
#endif
6868

69+
#ifndef RB_UNLIKELY
70+
#define RB_UNLIKELY(expr) expr
71+
#endif
72+
6973
static FBuffer *fbuffer_alloc(unsigned long initial_length)
7074
{
7175
FBuffer *fb;
@@ -87,20 +91,22 @@ static void fbuffer_clear(FBuffer *fb)
8791
fb->len = 0;
8892
}
8993

90-
static void fbuffer_inc_capa(FBuffer *fb, unsigned long requested)
94+
static inline void fbuffer_inc_capa(FBuffer *fb, unsigned long requested)
9195
{
92-
unsigned long required;
96+
if (RB_UNLIKELY(requested > fb->capa - fb->len)) {
97+
unsigned long required;
9398

94-
if (!fb->ptr) {
95-
fb->ptr = ALLOC_N(char, fb->initial_length);
96-
fb->capa = fb->initial_length;
97-
}
99+
if (RB_UNLIKELY(!fb->ptr)) {
100+
fb->ptr = ALLOC_N(char, fb->initial_length);
101+
fb->capa = fb->initial_length;
102+
}
98103

99-
for (required = fb->capa; requested > required - fb->len; required <<= 1);
104+
for (required = fb->capa; requested > required - fb->len; required <<= 1);
100105

101-
if (required > fb->capa) {
102-
REALLOC_N(fb->ptr, char, required);
103-
fb->capa = required;
106+
if (required > fb->capa) {
107+
REALLOC_N(fb->ptr, char, required);
108+
fb->capa = required;
109+
}
104110
}
105111
}
106112

0 commit comments

Comments
 (0)