| 1179:ca4c6f590a08 | 1180:4c3a69b9723a |
|---|---|
| 225 * (if @c NULL, a default stdlib allocator will be used) | 225 * (if @c NULL, a default stdlib allocator will be used) |
| 226 * @param flags buffer features (see cx_buffer_s.flags) | 226 * @param flags buffer features (see cx_buffer_s.flags) |
| 227 * @return zero on success, non-zero if a required allocation failed | 227 * @return zero on success, non-zero if a required allocation failed |
| 228 */ | 228 */ |
| 229 cx_attr_nonnull_arg(1) | 229 cx_attr_nonnull_arg(1) |
| 230 cx_attr_export | |
| 230 int cxBufferInit( | 231 int cxBufferInit( |
| 231 CxBuffer *buffer, | 232 CxBuffer *buffer, |
| 232 void *space, | 233 void *space, |
| 233 size_t capacity, | 234 size_t capacity, |
| 234 const CxAllocator *allocator, | 235 const CxAllocator *allocator, |
| 248 * @retval non-zero failure | 249 * @retval non-zero failure |
| 249 * @see cxBufferFlush() | 250 * @see cxBufferFlush() |
| 250 * @see cxBufferWrite() | 251 * @see cxBufferWrite() |
| 251 */ | 252 */ |
| 252 cx_attr_nonnull | 253 cx_attr_nonnull |
| 254 cx_attr_export | |
| 253 int cxBufferEnableFlushing( | 255 int cxBufferEnableFlushing( |
| 254 CxBuffer *buffer, | 256 CxBuffer *buffer, |
| 255 CxBufferFlushConfig config | 257 CxBufferFlushConfig config |
| 256 ); | 258 ); |
| 257 | 259 |
| 263 * | 265 * |
| 264 * @param buffer the buffer which contents shall be destroyed | 266 * @param buffer the buffer which contents shall be destroyed |
| 265 * @see cxBufferInit() | 267 * @see cxBufferInit() |
| 266 */ | 268 */ |
| 267 cx_attr_nonnull | 269 cx_attr_nonnull |
| 270 cx_attr_export | |
| 268 void cxBufferDestroy(CxBuffer *buffer); | 271 void cxBufferDestroy(CxBuffer *buffer); |
| 269 | 272 |
| 270 /** | 273 /** |
| 271 * Deallocates the buffer. | 274 * Deallocates the buffer. |
| 272 * | 275 * |
| 277 * case it does nothing. | 280 * case it does nothing. |
| 278 * | 281 * |
| 279 * @param buffer the buffer to deallocate | 282 * @param buffer the buffer to deallocate |
| 280 * @see cxBufferCreate() | 283 * @see cxBufferCreate() |
| 281 */ | 284 */ |
| 285 cx_attr_export | |
| 282 void cxBufferFree(CxBuffer *buffer); | 286 void cxBufferFree(CxBuffer *buffer); |
| 283 | 287 |
| 284 /** | 288 /** |
| 285 * Allocates and initializes a fresh buffer. | 289 * Allocates and initializes a fresh buffer. |
| 286 * | 290 * |
| 306 * @return a pointer to the buffer on success, @c NULL if a required allocation failed | 310 * @return a pointer to the buffer on success, @c NULL if a required allocation failed |
| 307 */ | 311 */ |
| 308 cx_attr_malloc | 312 cx_attr_malloc |
| 309 cx_attr_dealloc(cxBufferFree, 1) | 313 cx_attr_dealloc(cxBufferFree, 1) |
| 310 cx_attr_nodiscard | 314 cx_attr_nodiscard |
| 315 cx_attr_export | |
| 311 CxBuffer *cxBufferCreate( | 316 CxBuffer *cxBufferCreate( |
| 312 void *space, | 317 void *space, |
| 313 size_t capacity, | 318 size_t capacity, |
| 314 const CxAllocator *allocator, | 319 const CxAllocator *allocator, |
| 315 int flags | 320 int flags |
| 350 * @retval non-zero if a required auto-extension or copy-on-write fails | 355 * @retval non-zero if a required auto-extension or copy-on-write fails |
| 351 * @see cxBufferShiftLeft() | 356 * @see cxBufferShiftLeft() |
| 352 * @see cxBufferShiftRight() | 357 * @see cxBufferShiftRight() |
| 353 */ | 358 */ |
| 354 cx_attr_nonnull | 359 cx_attr_nonnull |
| 360 cx_attr_export | |
| 355 int cxBufferShift( | 361 int cxBufferShift( |
| 356 CxBuffer *buffer, | 362 CxBuffer *buffer, |
| 357 off_t shift | 363 off_t shift |
| 358 ); | 364 ); |
| 359 | 365 |
| 366 * @retval zero success | 372 * @retval zero success |
| 367 * @retval non-zero if a required auto-extension or copy-on-write fails | 373 * @retval non-zero if a required auto-extension or copy-on-write fails |
| 368 * @see cxBufferShift() | 374 * @see cxBufferShift() |
| 369 */ | 375 */ |
| 370 cx_attr_nonnull | 376 cx_attr_nonnull |
| 377 cx_attr_export | |
| 371 int cxBufferShiftRight( | 378 int cxBufferShiftRight( |
| 372 CxBuffer *buffer, | 379 CxBuffer *buffer, |
| 373 size_t shift | 380 size_t shift |
| 374 ); | 381 ); |
| 375 | 382 |
| 382 * @retval zero success | 389 * @retval zero success |
| 383 * @retval non-zero if the buffer uses copy-on-write and the allocation fails | 390 * @retval non-zero if the buffer uses copy-on-write and the allocation fails |
| 384 * @see cxBufferShift() | 391 * @see cxBufferShift() |
| 385 */ | 392 */ |
| 386 cx_attr_nonnull | 393 cx_attr_nonnull |
| 394 cx_attr_export | |
| 387 int cxBufferShiftLeft( | 395 int cxBufferShiftLeft( |
| 388 CxBuffer *buffer, | 396 CxBuffer *buffer, |
| 389 size_t shift | 397 size_t shift |
| 390 ); | 398 ); |
| 391 | 399 |
| 409 * @retval zero success | 417 * @retval zero success |
| 410 * @retval non-zero if the position is invalid | 418 * @retval non-zero if the position is invalid |
| 411 * | 419 * |
| 412 */ | 420 */ |
| 413 cx_attr_nonnull | 421 cx_attr_nonnull |
| 422 cx_attr_export | |
| 414 int cxBufferSeek( | 423 int cxBufferSeek( |
| 415 CxBuffer *buffer, | 424 CxBuffer *buffer, |
| 416 off_t offset, | 425 off_t offset, |
| 417 int whence | 426 int whence |
| 418 ); | 427 ); |
| 428 * | 437 * |
| 429 * @param buffer the buffer to be cleared | 438 * @param buffer the buffer to be cleared |
| 430 * @see cxBufferReset() | 439 * @see cxBufferReset() |
| 431 */ | 440 */ |
| 432 cx_attr_nonnull | 441 cx_attr_nonnull |
| 442 cx_attr_export | |
| 433 void cxBufferClear(CxBuffer *buffer); | 443 void cxBufferClear(CxBuffer *buffer); |
| 434 | 444 |
| 435 /** | 445 /** |
| 436 * Resets the buffer by resetting the position and size to zero. | 446 * Resets the buffer by resetting the position and size to zero. |
| 437 * | 447 * |
| 440 * | 450 * |
| 441 * @param buffer the buffer to be cleared | 451 * @param buffer the buffer to be cleared |
| 442 * @see cxBufferClear() | 452 * @see cxBufferClear() |
| 443 */ | 453 */ |
| 444 cx_attr_nonnull | 454 cx_attr_nonnull |
| 455 cx_attr_export | |
| 445 void cxBufferReset(CxBuffer *buffer); | 456 void cxBufferReset(CxBuffer *buffer); |
| 446 | 457 |
| 447 /** | 458 /** |
| 448 * Tests, if the buffer position has exceeded the buffer size. | 459 * Tests, if the buffer position has exceeded the buffer size. |
| 449 * | 460 * |
| 452 * byte of the buffer's contents | 463 * byte of the buffer's contents |
| 453 * @retval false otherwise | 464 * @retval false otherwise |
| 454 */ | 465 */ |
| 455 cx_attr_nonnull | 466 cx_attr_nonnull |
| 456 cx_attr_nodiscard | 467 cx_attr_nodiscard |
| 468 cx_attr_export | |
| 457 bool cxBufferEof(const CxBuffer *buffer); | 469 bool cxBufferEof(const CxBuffer *buffer); |
| 458 | 470 |
| 459 | 471 |
| 460 /** | 472 /** |
| 461 * Ensures that the buffer has a minimum capacity. | 473 * Ensures that the buffer has a minimum capacity. |
| 466 * @param capacity the minimum required capacity for this buffer | 478 * @param capacity the minimum required capacity for this buffer |
| 467 * @retval zero the capacity was already sufficient or successfully increased | 479 * @retval zero the capacity was already sufficient or successfully increased |
| 468 * @retval non-zero on allocation failure | 480 * @retval non-zero on allocation failure |
| 469 */ | 481 */ |
| 470 cx_attr_nonnull | 482 cx_attr_nonnull |
| 483 cx_attr_export | |
| 471 int cxBufferMinimumCapacity( | 484 int cxBufferMinimumCapacity( |
| 472 CxBuffer *buffer, | 485 CxBuffer *buffer, |
| 473 size_t capacity | 486 size_t capacity |
| 474 ); | 487 ); |
| 475 | 488 |
| 513 * @return the total count of elements written | 526 * @return the total count of elements written |
| 514 * @see cxBufferAppend() | 527 * @see cxBufferAppend() |
| 515 * @see cxBufferRead() | 528 * @see cxBufferRead() |
| 516 */ | 529 */ |
| 517 cx_attr_nonnull | 530 cx_attr_nonnull |
| 531 cx_attr_export | |
| 518 size_t cxBufferWrite( | 532 size_t cxBufferWrite( |
| 519 const void *ptr, | 533 const void *ptr, |
| 520 size_t size, | 534 size_t size, |
| 521 size_t nitems, | 535 size_t nitems, |
| 522 CxBuffer *buffer | 536 CxBuffer *buffer |
| 540 * @return the total count of elements written | 554 * @return the total count of elements written |
| 541 * @see cxBufferWrite() | 555 * @see cxBufferWrite() |
| 542 * @see cxBufferRead() | 556 * @see cxBufferRead() |
| 543 */ | 557 */ |
| 544 cx_attr_nonnull | 558 cx_attr_nonnull |
| 559 cx_attr_export | |
| 545 size_t cxBufferAppend( | 560 size_t cxBufferAppend( |
| 546 const void *ptr, | 561 const void *ptr, |
| 547 size_t size, | 562 size_t size, |
| 548 size_t nitems, | 563 size_t nitems, |
| 549 CxBuffer *buffer | 564 CxBuffer *buffer |
| 601 * @param buffer the buffer | 616 * @param buffer the buffer |
| 602 * @return the number of successfully flushed bytes | 617 * @return the number of successfully flushed bytes |
| 603 * @see cxBufferEnableFlushing() | 618 * @see cxBufferEnableFlushing() |
| 604 */ | 619 */ |
| 605 cx_attr_nonnull | 620 cx_attr_nonnull |
| 621 cx_attr_export | |
| 606 size_t cxBufferFlush(CxBuffer *buffer); | 622 size_t cxBufferFlush(CxBuffer *buffer); |
| 607 | 623 |
| 608 /** | 624 /** |
| 609 * Reads data from a CxBuffer. | 625 * Reads data from a CxBuffer. |
| 610 * | 626 * |
| 619 * @return the total number of elements read | 635 * @return the total number of elements read |
| 620 * @see cxBufferWrite() | 636 * @see cxBufferWrite() |
| 621 * @see cxBufferAppend() | 637 * @see cxBufferAppend() |
| 622 */ | 638 */ |
| 623 cx_attr_nonnull | 639 cx_attr_nonnull |
| 640 cx_attr_export | |
| 624 size_t cxBufferRead( | 641 size_t cxBufferRead( |
| 625 void *ptr, | 642 void *ptr, |
| 626 size_t size, | 643 size_t size, |
| 627 size_t nitems, | 644 size_t nitems, |
| 628 CxBuffer *buffer | 645 CxBuffer *buffer |
| 646 * @return the byte that has been written or @c EOF when the end of the stream is | 663 * @return the byte that has been written or @c EOF when the end of the stream is |
| 647 * reached and automatic extension is not enabled or not possible | 664 * reached and automatic extension is not enabled or not possible |
| 648 * @see cxBufferTerminate() | 665 * @see cxBufferTerminate() |
| 649 */ | 666 */ |
| 650 cx_attr_nonnull | 667 cx_attr_nonnull |
| 668 cx_attr_export | |
| 651 int cxBufferPut( | 669 int cxBufferPut( |
| 652 CxBuffer *buffer, | 670 CxBuffer *buffer, |
| 653 int c | 671 int c |
| 654 ); | 672 ); |
| 655 | 673 |
| 664 * | 682 * |
| 665 * @param buffer the buffer to write to | 683 * @param buffer the buffer to write to |
| 666 * @return zero, if the terminator could be written, non-zero otherwise | 684 * @return zero, if the terminator could be written, non-zero otherwise |
| 667 */ | 685 */ |
| 668 cx_attr_nonnull | 686 cx_attr_nonnull |
| 687 cx_attr_export | |
| 669 int cxBufferTerminate(CxBuffer *buffer); | 688 int cxBufferTerminate(CxBuffer *buffer); |
| 670 | 689 |
| 671 /** | 690 /** |
| 672 * Writes a string to a buffer. | 691 * Writes a string to a buffer. |
| 673 * | 692 * |
| 677 * @param str the zero-terminated string | 696 * @param str the zero-terminated string |
| 678 * @return the number of bytes written | 697 * @return the number of bytes written |
| 679 */ | 698 */ |
| 680 cx_attr_nonnull | 699 cx_attr_nonnull |
| 681 cx_attr_cstr_arg(2) | 700 cx_attr_cstr_arg(2) |
| 701 cx_attr_export | |
| 682 size_t cxBufferPutString( | 702 size_t cxBufferPutString( |
| 683 CxBuffer *buffer, | 703 CxBuffer *buffer, |
| 684 const char *str | 704 const char *str |
| 685 ); | 705 ); |
| 686 | 706 |
| 691 * | 711 * |
| 692 * @param buffer the buffer to read from | 712 * @param buffer the buffer to read from |
| 693 * @return the character or @c EOF, if the end of the buffer is reached | 713 * @return the character or @c EOF, if the end of the buffer is reached |
| 694 */ | 714 */ |
| 695 cx_attr_nonnull | 715 cx_attr_nonnull |
| 716 cx_attr_export | |
| 696 int cxBufferGet(CxBuffer *buffer); | 717 int cxBufferGet(CxBuffer *buffer); |
| 697 | 718 |
| 698 #ifdef __cplusplus | 719 #ifdef __cplusplus |
| 699 } | 720 } |
| 700 #endif | 721 #endif |