src/buffer.c

changeset 1576
7e19168d49d1
parent 1575
dde0c67a449b
child 1577
b5e6b91a98c3
equal deleted inserted replaced
1575:dde0c67a449b 1576:7e19168d49d1
297 const void *ptr, 297 const void *ptr,
298 size_t size, 298 size_t size,
299 size_t nitems, 299 size_t nitems,
300 CxBuffer *buffer 300 CxBuffer *buffer
301 ) { 301 ) {
302 // trivial case
303 if (size == 0 || nitems == 0) return 0;
304
302 // optimize for easy case 305 // optimize for easy case
303 if (size == 1 && (buffer->capacity - buffer->pos) >= nitems) { 306 if (size == 1 && (buffer->capacity - buffer->pos) >= nitems) {
304 if (buffer_copy_on_write(buffer)) return 0; 307 if (buffer_copy_on_write(buffer)) return 0;
305 memcpy(buffer->bytes + buffer->pos, ptr, nitems); 308 memcpy(buffer->bytes + buffer->pos, ptr, nitems);
306 buffer->pos += nitems; 309 buffer->pos += nitems;
362 const void *ptr, 365 const void *ptr,
363 size_t size, 366 size_t size,
364 size_t nitems, 367 size_t nitems,
365 CxBuffer *buffer 368 CxBuffer *buffer
366 ) { 369 ) {
370 // trivial case
371 if (size == 0 || nitems == 0) return 0;
372
367 size_t pos = buffer->pos; 373 size_t pos = buffer->pos;
368 size_t append_pos = buffer->size; 374 size_t append_pos = buffer->size;
369 buffer->pos = append_pos; 375 buffer->pos = append_pos;
370 size_t written = cxBufferWrite(ptr, size, nitems, buffer); 376 size_t written = cxBufferWrite(ptr, size, nitems, buffer);
371 // the buffer might have been flushed 377 // the buffer might have been flushed
416 // write the terminator and exit 422 // write the terminator and exit
417 buffer->space[buffer->pos] = '\0'; 423 buffer->space[buffer->pos] = '\0';
418 return 0; 424 return 0;
419 } 425 }
420 426
421 size_t cxBufferPutString( 427 size_t cx_buffer_put_string(CxBuffer *buffer, cxstring str) {
422 CxBuffer *buffer, 428 return cxBufferWrite(str.ptr, 1, str.length, buffer);
423 const char *str 429 }
424 ) { 430
425 return cxBufferWrite(str, 1, strlen(str), buffer); 431 size_t cx_buffer_append_string(CxBuffer *buffer, cxstring str) {
432 return cxBufferAppend(str.ptr, 1, str.length, buffer);
426 } 433 }
427 434
428 size_t cxBufferRead( 435 size_t cxBufferRead(
429 void *ptr, 436 void *ptr,
430 size_t size, 437 size_t size,

mercurial