updates. New data types.
[silc.git] / lib / silcutil / silcbuffer.h
index 8658e608a4f8c788f65e6888086b856d8d60bef2..124911031f8741a8174d61a615ffe8730df147a4 100644 (file)
@@ -17,6 +17,8 @@
   GNU General Public License for more details.
 
 */
+/* $Id$ */
+/* Optimized buffer managing routines.  These are short inline functions. */
 
 #ifndef SILCBUFFER_H
 #define SILCBUFFER_H
    the allocated data area. Following short description of the fields
    of the buffer.
 
-   unsigned int truelen;
+   uint32 truelen;
 
        True length of the buffer. This is set at the allocation of the
        buffer and it should not be touched after that. This field should
        be considered read-only.
 
-   unsigned int len;
+   uint32 len;
 
        Length of the currently valid data area. Tells the length of the 
        data at the buffer. This is set to zero at the allocation of the
 */
 
 typedef struct SilcBufferStruct {
-  unsigned int truelen;
-  unsigned int len;
+  uint32 truelen;
+  uint32 len;
   unsigned char *head;
   unsigned char *data;
   unsigned char *tail;
@@ -126,32 +128,24 @@ typedef SilcBufferObject *SilcBuffer;
    the buffer area to the end of the buffer. */
 #define SILC_BUFFER_END(x) ((x)->end - (x)->head)
 
-#ifndef SILC_DEBUG             /* When we are not doing debugging we use
-                                  optimized inline buffer functions. */
-/* 
- * Optimized buffer managing routines.  These are short inline
- * functions.
- */
+/* Inline functions */
 
 extern inline
-SilcBuffer silc_buffer_alloc(unsigned int len)
+SilcBuffer silc_buffer_alloc(uint32 len)
 {
   SilcBuffer sb;
-  unsigned char *data;
 
   /* Allocate new SilcBuffer */
   sb = silc_calloc(1, sizeof(*sb));
 
   /* Allocate the actual data area */
-  data = silc_calloc(len, sizeof(*data));
+  sb->head = silc_calloc(len, sizeof(*sb->head));
 
   /* Set pointers to the new buffer */
   sb->truelen = len;
-  sb->len = 0;
-  sb->head = data;
-  sb->data = data;
-  sb->tail = data;
-  sb->end = data + sb->truelen;
+  sb->data = sb->head;
+  sb->tail = sb->head;
+  sb->end = sb->head + sb->truelen;
 
   return sb;
 }
@@ -186,11 +180,13 @@ void silc_buffer_free(SilcBuffer sb)
 */
 
 extern inline 
-unsigned char *silc_buffer_pull(SilcBuffer sb, unsigned int len)
+unsigned char *silc_buffer_pull(SilcBuffer sb, uint32 len)
 {
   unsigned char *old_data = sb->data;
 
+#ifdef SILC_DEBUG
   assert(len <= (sb->tail - sb->data));
+#endif
 
   sb->data += len;
   sb->len -= len;
@@ -216,11 +212,13 @@ unsigned char *silc_buffer_pull(SilcBuffer sb, unsigned int len)
 */
 
 extern inline 
-unsigned char *silc_buffer_push(SilcBuffer sb, unsigned int len)
+unsigned char *silc_buffer_push(SilcBuffer sb, uint32 len)
 {
   unsigned char *old_data = sb->data;
 
+#ifdef SILC_DEBUG
   assert((sb->data - len) >= sb->head);
+#endif
 
   sb->data -= len;
   sb->len += len;
@@ -246,11 +244,13 @@ unsigned char *silc_buffer_push(SilcBuffer sb, unsigned int len)
 */
 
 extern inline 
-unsigned char *silc_buffer_pull_tail(SilcBuffer sb, unsigned int len)
+unsigned char *silc_buffer_pull_tail(SilcBuffer sb, uint32 len)
 {
   unsigned char *old_tail = sb->tail;
 
+#ifdef SILC_DEBUG
   assert((sb->end - sb->tail) >= len);
+#endif
 
   sb->tail += len;
   sb->len += len;
@@ -276,11 +276,13 @@ unsigned char *silc_buffer_pull_tail(SilcBuffer sb, unsigned int len)
 */
 
 extern inline
-unsigned char *silc_buffer_push_tail(SilcBuffer sb, unsigned int len)
+unsigned char *silc_buffer_push_tail(SilcBuffer sb, uint32 len)
 {
   unsigned char *old_tail = sb->tail;
 
+#ifdef SILC_DEBUG
   assert((sb->tail - len) >= sb->data);
+#endif
 
   sb->tail -= len;
   sb->len -= len;
@@ -302,9 +304,11 @@ unsigned char *silc_buffer_push_tail(SilcBuffer sb, unsigned int len)
 extern inline
 unsigned char *silc_buffer_put_head(SilcBuffer sb, 
                                    unsigned char *data,
-                                   unsigned int len)
+                                   uint32 len)
 {
+#ifdef SILC_DEBUG
   assert((sb->data - sb->head) >= len);
+#endif
   return memcpy(sb->head, data, len);
 }
 
@@ -322,9 +326,11 @@ unsigned char *silc_buffer_put_head(SilcBuffer sb,
 extern inline
 unsigned char *silc_buffer_put(SilcBuffer sb, 
                               unsigned char *data,
-                              unsigned int len)
+                              uint32 len)
 {
+#ifdef SILC_DEBUG
   assert((sb->tail - sb->data) >= len);
+#endif
   return memcpy(sb->data, data, len);
 }
 
@@ -342,31 +348,12 @@ unsigned char *silc_buffer_put(SilcBuffer sb,
 extern inline
 unsigned char *silc_buffer_put_tail(SilcBuffer sb, 
                                    unsigned char *data,
-                                   unsigned int len)
+                                   uint32 len)
 {
+#ifdef SILC_DEBUG
   assert((sb->end - sb->tail) >= len);
+#endif
   return memcpy(sb->tail, data, len);
 }
 
-#endif /* !SILC_DEBUG */
-
-/* Prototypes */
-#ifdef SILC_DEBUG
-SilcBuffer silc_buffer_alloc(unsigned int len);
-void silc_buffer_free(SilcBuffer sb);
-unsigned char *silc_buffer_pull(SilcBuffer sb, unsigned int len);
-unsigned char *silc_buffer_push(SilcBuffer sb, unsigned int len);
-unsigned char *silc_buffer_pull_tail(SilcBuffer sb, unsigned int len);
-unsigned char *silc_buffer_push_tail(SilcBuffer sb, unsigned int len);
-unsigned char *silc_buffer_put_head(SilcBuffer sb, 
-                                   unsigned char *data,
-                                   unsigned int len);
-unsigned char *silc_buffer_put(SilcBuffer sb, 
-                              unsigned char *data,
-                              unsigned int len);
-unsigned char *silc_buffer_put_tail(SilcBuffer sb, 
-                                   unsigned char *data,
-                                   unsigned int len);
-#endif
-
 #endif