@@ -66,6 +66,10 @@ static FBuffer *fbuffer_dup(FBuffer *fb);
66
66
static VALUE fbuffer_to_s (FBuffer * fb );
67
67
#endif
68
68
69
+ #ifndef RB_UNLIKELY
70
+ #define RB_UNLIKELY (expr ) expr
71
+ #endif
72
+
69
73
static FBuffer * fbuffer_alloc (unsigned long initial_length )
70
74
{
71
75
FBuffer * fb ;
@@ -87,20 +91,22 @@ static void fbuffer_clear(FBuffer *fb)
87
91
fb -> len = 0 ;
88
92
}
89
93
90
- static void fbuffer_inc_capa (FBuffer * fb , unsigned long requested )
94
+ static inline void fbuffer_inc_capa (FBuffer * fb , unsigned long requested )
91
95
{
92
- unsigned long required ;
96
+ if (RB_UNLIKELY (requested > fb -> capa - fb -> len )) {
97
+ unsigned long required ;
93
98
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
+ }
98
103
99
- for (required = fb -> capa ; requested > required - fb -> len ; required <<= 1 );
104
+ for (required = fb -> capa ; requested > required - fb -> len ; required <<= 1 );
100
105
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
+ }
104
110
}
105
111
}
106
112
0 commit comments