30 #include "cx/utils.h" |
30 #include "cx/utils.h" |
31 |
31 |
32 #include <stdlib.h> |
32 #include <stdlib.h> |
33 #include <string.h> |
33 #include <string.h> |
34 |
34 |
35 CxBuffer *cxBufferCreate( |
35 int cxBufferInit( |
|
36 CxBuffer *buffer, |
36 void *space, |
37 void *space, |
37 size_t capacity, |
38 size_t capacity, |
|
39 CxAllocator *allocator, |
38 int flags |
40 int flags |
39 ) { |
41 ) { |
40 CxBuffer *buffer = (CxBuffer *) malloc(sizeof(cx_buffer_s)); |
42 buffer->allocator = allocator; |
41 if (buffer) { |
43 buffer->flags = flags; |
42 buffer->flags = flags; |
44 if (!space) { |
43 if (!space) { |
45 buffer->bytes = cxMalloc(allocator, capacity); |
44 buffer->bytes = malloc(capacity); |
46 if (buffer->bytes == NULL) { |
45 if (!buffer->bytes) { |
47 return 1; |
46 free(buffer); |
48 } |
47 return NULL; |
49 memset(buffer->bytes, 0, capacity); |
48 } |
50 buffer->flags |= CX_BUFFER_FREE_CONTENTS; |
49 memset(buffer->bytes, 0, capacity); |
51 } else { |
50 buffer->flags |= CX_BUFFER_FREE_CONTENTS; |
52 buffer->bytes = space; |
51 } else { |
53 } |
52 buffer->bytes = space; |
54 buffer->capacity = capacity; |
53 } |
55 buffer->size = 0; |
54 buffer->capacity = capacity; |
56 |
55 buffer->size = 0; |
57 buffer->pos = 0; |
56 |
58 |
57 buffer->pos = 0; |
59 return 0; |
58 } |
|
59 |
|
60 return buffer; |
|
61 } |
60 } |
62 |
61 |
63 void cxBufferDestroy(CxBuffer *buffer) { |
62 void cxBufferDestroy(CxBuffer *buffer) { |
64 if ((buffer->flags & CX_BUFFER_FREE_CONTENTS) == CX_BUFFER_FREE_CONTENTS) { |
63 if ((buffer->flags & CX_BUFFER_FREE_CONTENTS) == CX_BUFFER_FREE_CONTENTS) { |
65 free(buffer->bytes); |
64 cxFree(buffer->allocator, buffer->bytes); |
66 } |
65 } |
67 free(buffer); |
|
68 } |
66 } |
69 |
67 |
70 CxBuffer *cxBufferExtract( |
68 CxBuffer *cxBufferExtract( |
71 CxBuffer *src, |
69 CxBuffer *src, |
72 size_t start, |
70 size_t start, |