summaryrefslogtreecommitdiffstats
path: root/debian/pilot-link/pilot-link-0.12.5-dfsg/include/pi-buffer.h
diff options
context:
space:
mode:
Diffstat (limited to 'debian/pilot-link/pilot-link-0.12.5-dfsg/include/pi-buffer.h')
-rw-r--r--debian/pilot-link/pilot-link-0.12.5-dfsg/include/pi-buffer.h143
1 files changed, 143 insertions, 0 deletions
diff --git a/debian/pilot-link/pilot-link-0.12.5-dfsg/include/pi-buffer.h b/debian/pilot-link/pilot-link-0.12.5-dfsg/include/pi-buffer.h
new file mode 100644
index 00000000..67f2a855
--- /dev/null
+++ b/debian/pilot-link/pilot-link-0.12.5-dfsg/include/pi-buffer.h
@@ -0,0 +1,143 @@
+/*
+ * $Id: pi-buffer.h,v 1.6 2006/10/17 13:24:06 desrod Exp $
+ *
+ * pi-buffer.h: simple data block management for variable data storage
+ *
+ * Copyright (c) 2004-2005, Florent Pillet.
+ *
+ * This library is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Library General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or (at
+ * your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; if not, write to the Free Software Foundation,
+ * * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+/** @file pi-buffer.h
+ * @brief Variable size buffer management interface
+ * @author Florent Pillet
+ *
+ * pi-buffer provides for a reliable and easy to use variable size buffer
+ * management, allowing for buffers that grow as needed to store
+ * variable-length data.
+ *
+ * When you create a buffer with pi_buffer_new(), you indicate an initial
+ * capacity that is allocated. The number of used bytes is set to 0. To
+ * append data to the buffer, use pi_buffer_append(). This ensures that the
+ * buffer grows as needed.
+ *
+ * You can access data in the buffer using the @a buffer->data member. The
+ * number of bytes used is always accessible using @a buffer->used.
+ *
+ * It is possible to use the pi-buffer functions on static buffers. In this
+ * case, you won't call pi_buffer_free() on the structure. You'll dispose of
+ * the memory yourself instead. Here is an example:
+ *
+ * @code
+ * pi_buffer_t mybuf;
+ * mybuf.data = (unsigned char *) malloc(256);
+ * mybuf.allocated = 256;
+ * mybuf.used = 0;
+ *
+ * // ... perform your tasks here ....
+ * pi_buffer_append(&mybuf, somedata, somedatasize);
+ * // ...
+ *
+ * free(mybuf.data);
+ * @endcode
+ */
+
+#ifndef _PILOT_BUFFER_H_
+#define _PILOT_BUFFER_H_
+
+#include "pi-args.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+ /** @brief Variable buffer structure */
+ typedef struct pi_buffer_t {
+ unsigned char *data; /**< Pointer to the data */
+ size_t allocated; /**< Number of bytes allocated */
+ size_t used; /**< Number of allocated bytes actually used */
+ } pi_buffer_t;
+
+ /** @brief Create a new variable size buffer
+ *
+ * Dispose of this buffer with pi_buffer_free()
+ *
+ * @param capacity Initial size to allocate
+ * @return A newly allocated pi_buffer_t structure
+ */
+ extern pi_buffer_t* pi_buffer_new
+ PI_ARGS((size_t capacity));
+
+ /** @brief Ensure the buffer is large enough to store @p capacity bytes of data
+ *
+ * This grows the allocated buffer as needed and updates the @a allocated
+ * member. Doesn't touch the @a used member. After this call succeeds, you
+ * can directly use the @a buffer->data pointer to store up to
+ * @a buffer->allocated bytes using direct memory access.
+ *
+ * @param buf The buffer to grow
+ * @param new_capacity The total number of bytes the buffer is expected to contain
+ * @return The @p buf buffer on success, NULL if a memory error happened
+ */
+ extern pi_buffer_t* pi_buffer_expect
+ PI_ARGS((pi_buffer_t *buf, size_t new_capacity));
+
+ /** @brief Append data to the buffer
+ *
+ * Grow the buffer if needed.
+ *
+ * @param buf The buffer to grow
+ * @param data Pointer to the data to append
+ * @param len Length of the data to append
+ * @return The @p buf buffer on success, NULL if a memory error happened
+ */
+ extern pi_buffer_t* pi_buffer_append
+ PI_ARGS((pi_buffer_t *buf, PI_CONST void *data, size_t len));
+
+ /** @brief Append a buffer to another buffer
+ *
+ * @param dest The buffer to append to
+ * @param src Buffer whose data will be appended to @p dest
+ * @return The @p dest buffer on success, NULL if a memory error happened
+ */
+ extern pi_buffer_t* pi_buffer_append_buffer
+ PI_ARGS((pi_buffer_t *dest, PI_CONST pi_buffer_t *src));
+
+ /** @brief Reset the @a used member of a buffer
+ *
+ * The @p used member is set to 0. If the actual allocated bytes is large,
+ * the allocation may shrink to a reasonable value to prevent unneeded
+ * memory use.
+ *
+ * @param buf The buffer to clear
+ * @return The @p buf parameter
+ */
+ extern void pi_buffer_clear
+ PI_ARGS((pi_buffer_t *buf));
+
+ /** @brief Dispose of all memory used by a buffer allocated with pi_buffer_new()
+ *
+ * After this call, the @p buf structure itself will have been freed as well.
+ * Do not reuse the pointer.
+ *
+ * @param buf The buffer to dispose of
+ */
+ extern void pi_buffer_free
+ PI_ARGS((pi_buffer_t *buf));
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif