]> mj.ucw.cz Git - libucw.git/commitdiff
Several tweaks to the growing buffers:
authorMartin Mares <mj@ucw.cz>
Thu, 15 Sep 2005 17:03:27 +0000 (17:03 +0000)
committerMartin Mares <mj@ucw.cz>
Thu, 15 Sep 2005 17:03:27 +0000 (17:03 +0000)
o  The _grow() function now returns pointer to the new buffer.
o  Many functions uninlined.
o  Fast path of _grow() is inline, but the slow path is not.

lib/gbuf.h

index a188f5d0aa0a7bf3e8d185ea52b001f2be5ebaa2..a5b71498d6fe75d728e556c4831b576beade13b7 100644 (file)
@@ -32,7 +32,7 @@ GBUF_PREFIX(init)(BUF_T *b)
   b->len = 0;
 }
 
-static inline void
+static void UNUSED
 GBUF_PREFIX(done)(BUF_T *b)
 {
   if (b->ptr)
@@ -41,8 +41,8 @@ GBUF_PREFIX(done)(BUF_T *b)
   b->len = 0;
 }
 
-static inline void
-GBUF_PREFIX(realloc)(BUF_T *b, uns len)
+static void UNUSED
+GBUF_PREFIX(set_size)(BUF_T *b, uns len)
 {
   b->len = len;
   b->ptr = xrealloc(b->ptr, len * sizeof(GBUF_TYPE));
@@ -51,14 +51,20 @@ GBUF_PREFIX(realloc)(BUF_T *b, uns len)
 #endif
 }
 
-static inline void
-GBUF_PREFIX(grow)(BUF_T *b, uns len)
+static void UNUSED
+GBUF_PREFIX(do_grow)(BUF_T *b, uns len)
 {
-  if (likely(len <= b->len))
-    return;
   if (len < 2*b->len)                  // to ensure logarithmic cost
     len = 2*b->len;
-  GBUF_PREFIX(realloc)(b, len);
+  GBUF_PREFIX(set_size)(b, len);
+}
+
+static inline GBUF_TYPE *
+GBUF_PREFIX(grow)(BUF_T *b, uns len)
+{
+  if (unlikely(len > b->len))
+    GBUF_PREFIX(do_grow)(b, len);
+  return b->ptr;
 }
 
 #undef GBUF_TYPE