|
- #pragma once
-
- #include <stdio.h>
- #include <assert.h>
- #include <stdlib.h>
- #include <stdint.h>
- #include <stddef.h>
- #include <string.h>
-
- #if defined (__cplusplus)
- extern "C" {
- #endif
-
- #if !defined(DEFAULT_CACHE_SIZE)
- #define DEFAULT_CACHE_SIZE (4 * 1024)
- #endif /* DEFAULT_CACHE_SIZE */
-
- typedef struct DynamicBuffer
- {
- void* buffer;
- size_t size;
- size_t capacity;
- } DynamicBuffer;
-
- #define DynamicBuffer_Capacity(o) ((DynamicBuffer *)(o))->capacity
- #define DynamicBuffer_Size(o) ((DynamicBuffer *)(o))->size
- #define DynamicBuffer_AppendChar(o,c) DynamicBuffer_Append(o, &c, sizeof(c))
- #define DynamicBuffer_AppendNull(o) DynamicBuffer_Append(o, "\0", 1)
- #define DynamicBuffer_AppendWNull(o) do { \
- DynamicBuffer_Append(o, "\0", 1); \
- DynamicBuffer_Append(o, "\0", 1); \
- } while (0)
- #define DynamicBuffer_AppendNullWithoutSize(o) do { \
- DynamicBuffer_Append(o, "\0", 1); \
- DynamicBuffer_Resize(o, DynamicBuffer_Size(o) - 1); \
- } while (0)
- #define DynamicBuffer_AppendWNullWithoutSize(o) do { \
- DynamicBuffer_Append(o, "\0", 1); \
- DynamicBuffer_Append(o, "\0", 1); \
- DynamicBuffer_Resize(o, DynamicBuffer_Size(o) - 2); \
- } while (0)
- #define DynamicBuffer_Buffer(o) (uint8_t *)(((DynamicBuffer *)(o))->buffer)
- #define DynamicBuffer_BufferAt(o,idx) ((uint8_t *)(((DynamicBuffer *)(o))->buffer) + idx)
- #define DynamicBuffer_BufferEnd(o) ((uint8_t *)(((DynamicBuffer *)(o))->buffer) + ((DynamicBuffer *)(o))->size)
- #define DynamicBuffer_Begin(o) (uint8_t *)(((DynamicBuffer *)(o))->buffer)
- #define DynamicBuffer_Back(o) ((((DynamicBuffer *)(o))->size > 0) ? ((uint8_t *)(((DynamicBuffer *)(o))->buffer) + ((DynamicBuffer *)(o))->size - 1) : NULL)
- #define DynamicBuffer_Clear(o) ((DynamicBuffer *)(o))->size = 0
- #define DynamicBuffer_AvailableBuffer(o) (((uint8_t *)((DynamicBuffer *)(o))->buffer) + ((DynamicBuffer *)(o))->size)
- #define DynamicBuffer_AvailableCapacity(o) (((DynamicBuffer *)(o))->capacity - ((DynamicBuffer *)(o))->size)
- #define DynamicBuffer_AppendString(o,msg) DynamicBuffer_Append((DynamicBuffer *)(o),(const char *)(msg),strlen((const char *)(msg)));
-
- #define DynamicBuffer_Swap(o,buffer,size) do { \
- free(((DynamicBuffer *)(o))->buffer); \
- ((DynamicBuffer *)(o))->buffer = buffer; \
- ((DynamicBuffer *)(o))->size = ((DynamicBuffer *)(o))->capacity = size; \
- } while (0)
-
- #define DynamicBuffer_ConstructWithSize(o,size) do { \
- memset(o, 0, sizeof(DynamicBuffer)); \
- DynamicBuffer_Reserve(o, size); \
- } while (0)
-
- #define DynamicBuffer_Construct(o) DynamicBuffer_ConstructWithSize(o, DEFAULT_CACHE_SIZE)
-
- #define DynamicBuffer_Destruct(o) do { \
- free(((DynamicBuffer *)(o))->buffer); \
- memset(o, 0, sizeof(DynamicBuffer)); \
- } while (0)
-
- int DynamicBuffer_Reserve(DynamicBuffer* o, size_t new_capacity);
- int DynamicBuffer_ResetBuffer(DynamicBuffer* o, size_t position);
- int DynamicBuffer_Resize(DynamicBuffer* o, size_t new_size);
- void DynamicBuffer_Append(DynamicBuffer* o, const void* buffer, size_t size);
-
- #if defined (__cplusplus)
- }
- #endif
|