src/buffer.c

changeset 529
814d51173f20
parent 501
9a08f5e515cc
child 530
e866516cac17
equal deleted inserted replaced
528:4fbfac557df8 529:814d51173f20
34 34
35 int cxBufferInit( 35 int cxBufferInit(
36 CxBuffer *buffer, 36 CxBuffer *buffer,
37 void *space, 37 void *space,
38 size_t capacity, 38 size_t capacity,
39 CxAllocator *allocator, 39 CxAllocator const *allocator,
40 int flags 40 int flags
41 ) { 41 ) {
42 buffer->allocator = allocator; 42 buffer->allocator = allocator;
43 buffer->flags = flags; 43 buffer->flags = flags;
44 if (!space) { 44 if (!space) {
61 61
62 void cxBufferDestroy(CxBuffer *buffer) { 62 void cxBufferDestroy(CxBuffer *buffer) {
63 if ((buffer->flags & CX_BUFFER_FREE_CONTENTS) == CX_BUFFER_FREE_CONTENTS) { 63 if ((buffer->flags & CX_BUFFER_FREE_CONTENTS) == CX_BUFFER_FREE_CONTENTS) {
64 cxFree(buffer->allocator, buffer->bytes); 64 cxFree(buffer->allocator, buffer->bytes);
65 } 65 }
66 }
67
68 CxBuffer *cxBufferExtract(
69 CxBuffer *src,
70 size_t start,
71 size_t length,
72 int flags
73 ) {
74 if (src->size == 0 || length == 0 ||
75 ((size_t) -1) - start < length || start + length > src->capacity) {
76 return NULL;
77 }
78
79 CxBuffer *dst = (CxBuffer *) malloc(sizeof(cx_buffer_s));
80 if (dst) {
81 dst->bytes = malloc(length);
82 if (!dst->bytes) {
83 free(dst);
84 return NULL;
85 }
86 dst->capacity = length;
87 dst->size = length;
88 dst->flags = flags | CX_BUFFER_FREE_CONTENTS;
89 dst->pos = 0;
90 memcpy(dst->bytes, src->bytes + start, length);
91 }
92 return dst;
93 } 66 }
94 67
95 int cxBufferSeek( 68 int cxBufferSeek(
96 CxBuffer *buffer, 69 CxBuffer *buffer,
97 off_t offset, 70 off_t offset,
126 return 0; 99 return 0;
127 } 100 }
128 101
129 } 102 }
130 103
131 int cxBufferEof(CxBuffer *buffer) { 104 void cxBufferClear(CxBuffer *buffer) {
105 memset(buffer->bytes, 0, buffer->size);
106 buffer->size = 0;
107 buffer->pos = 0;
108 }
109
110 int cxBufferEof(CxBuffer const *buffer) {
132 return buffer->pos >= buffer->size; 111 return buffer->pos >= buffer->size;
133 } 112 }
134 113
135 int cxBufferMinimumCapacity( 114 int cxBufferMinimumCapacity(
136 CxBuffer *buffer, 115 CxBuffer *buffer,

mercurial