Use Xt memory allocation functions
Why do these even exist? I mean I guess there are some additions compared to the standard ones but like why, why not just make supplemental ones. Do these allocation functions do some wierd different shit? What?
This commit is contained in:
@@ -1,30 +1,32 @@
|
||||
#include <Xmd/Buffer.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#define XmdBUFFER_GROWTH_FACTOR 2
|
||||
#define XmdBUFFER_GROWTH_FACTOR 2
|
||||
#define XmdBUFFER_INITIAL_CAPACITY 8
|
||||
|
||||
struct _XmdBuffer {
|
||||
void * data;
|
||||
size_t element;
|
||||
size_t length;
|
||||
size_t capacity;
|
||||
void * data;
|
||||
Cardinal size;
|
||||
Cardinal length;
|
||||
Cardinal capacity;
|
||||
};
|
||||
|
||||
static void XmdBufferResize (XmdBuffer *buffer, size_t length);
|
||||
static void XmdBufferResize (XmdBuffer *buffer, Cardinal length);
|
||||
static void XmdBufferFit (XmdBuffer *buffer);
|
||||
static void *XmdBufferOffset (XmdBuffer *buffer, size_t index);
|
||||
static void *XmdBufferOffset (XmdBuffer *buffer, Cardinal index);
|
||||
|
||||
XmdBuffer *XmdBufferNew (size_t element) {
|
||||
XmdBuffer *buffer = calloc(1, sizeof(XmdBuffer));
|
||||
buffer->element = element;
|
||||
buffer->capacity = 1;
|
||||
buffer->data = calloc(buffer->capacity, buffer->element);
|
||||
XmdBuffer *XmdBufferNew (Cardinal size) {
|
||||
XmdBuffer *buffer = XtNew(XmdBuffer);
|
||||
buffer->size = size;
|
||||
buffer->length = 0;
|
||||
buffer->capacity = XmdBUFFER_INITIAL_CAPACITY;
|
||||
buffer->data = XtCalloc(buffer->capacity, buffer->size);
|
||||
XmdBufferFit(buffer);
|
||||
return buffer;
|
||||
}
|
||||
|
||||
void XmdBufferResize (XmdBuffer *buffer, size_t length) {
|
||||
void XmdBufferResize (XmdBuffer *buffer, Cardinal length) {
|
||||
buffer->length = length;
|
||||
XmdBufferFit(buffer);
|
||||
}
|
||||
@@ -32,14 +34,15 @@ void XmdBufferResize (XmdBuffer *buffer, size_t length) {
|
||||
void XmdBufferFit (XmdBuffer *buffer) {
|
||||
if (buffer->length > buffer->capacity) {
|
||||
buffer->capacity *= XmdBUFFER_GROWTH_FACTOR;
|
||||
buffer->data = realloc (
|
||||
buffer->data = XtReallocArray (
|
||||
buffer->data,
|
||||
buffer->capacity * buffer->element);
|
||||
buffer->capacity,
|
||||
buffer->size);
|
||||
}
|
||||
}
|
||||
|
||||
void *XmdBufferOffset (XmdBuffer *buffer, size_t index) {
|
||||
return buffer->data + (index * buffer->element);
|
||||
void *XmdBufferOffset (XmdBuffer *buffer, Cardinal index) {
|
||||
return buffer->data + (index * buffer->size);
|
||||
}
|
||||
|
||||
void XmdBufferPush (XmdBuffer *buffer, void *element) {
|
||||
@@ -47,16 +50,16 @@ void XmdBufferPush (XmdBuffer *buffer, void *element) {
|
||||
memcpy (
|
||||
XmdBufferOffset(buffer, buffer->length - 1),
|
||||
element,
|
||||
buffer->element);
|
||||
buffer->size);
|
||||
}
|
||||
|
||||
void *XmdBufferBreak (XmdBuffer *buffer) {
|
||||
void *data = buffer->data;
|
||||
free(buffer);
|
||||
XtFree((char *)(buffer));
|
||||
return data;
|
||||
}
|
||||
|
||||
void XmdBufferFree (XmdBuffer *buffer) {
|
||||
free(buffer->data);
|
||||
free(buffer);
|
||||
XtFree(buffer->data);
|
||||
XtFree((char *)(buffer));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user