src/cx/properties.h

changeset 1058
d347f74ce7d1
parent 1038
8cab3d8e0af4
child 1059
154eb64ce746
equal deleted inserted replaced
1057:4e8436c3e806 1058:d347f74ce7d1
368 * Fills the input buffer with data. 368 * Fills the input buffer with data.
369 * 369 *
370 * After calling this function, you can parse the data by calling 370 * After calling this function, you can parse the data by calling
371 * cxPropertiesNext(). 371 * cxPropertiesNext().
372 * 372 *
373 * @remark The properties interface tries to avoid allocations.
374 * When you use this function and cxPropertiesNext() interleaving,
375 * no allocations are performed. However, you must not free the
376 * pointer to the data in that case. When you invoke the fill
377 * function more than once before calling cxPropertiesNext(),
378 * the additional data is appended - inevitably leading to
379 * an allocation of a new buffer and copying the previous contents.
380 *
381 * @param prop the properties interface
382 * @param buf a pointer to the data
383 * @param len the length of the data
384 * @return non-zero when a memory allocation was necessary but failed
385 */
386 cx_attr_nonnull
387 cx_attr_access_r(2, 3)
388 int cxPropertiesFilln(
389 CxProperties *prop,
390 const char *buf,
391 size_t len
392 );
393
394 #ifdef __cplusplus
395 } // extern "C"
396 cx_attr_nonnull
397 static inline int cxPropertiesFill(
398 CxProperties *prop,
399 cxstring str
400 ) {
401 return cxPropertiesFilln(prop, str.ptr, str.length);
402 }
403
404 cx_attr_nonnull
405 static inline int cxPropertiesFill(
406 CxProperties *prop,
407 cxmutstr str
408 ) {
409 return cxPropertiesFilln(prop, str.ptr, str.length);
410 }
411
412 cx_attr_nonnull
413 cx_attr_cstr_arg(2)
414 static inline int cxPropertiesFill(
415 CxProperties *prop,
416 const char *str
417 ) {
418 return cxPropertiesFilln(prop, str, strlen(str));
419 }
420
421 extern "C" {
422 #else // __cplusplus
423 /**
424 * Fills the input buffer with data.
425 *
426 * After calling this function, you can parse the data by calling
427 * cxPropertiesNext().
428 *
373 * @attention The properties interface tries to avoid allocations. 429 * @attention The properties interface tries to avoid allocations.
374 * When you use this function and cxPropertiesNext() interleaving, 430 * When you use this function and cxPropertiesNext() interleaving,
375 * no allocations are performed. However, you must not free the 431 * no allocations are performed. However, you must not free the
376 * pointer to the data in that case. When you invoke the fill 432 * pointer to the data in that case. When you invoke the fill
377 * function more than once before calling cxPropertiesNext(), 433 * function more than once before calling cxPropertiesNext(),
378 * the additional data is appended - inevitably leading to 434 * the additional data is appended - inevitably leading to
379 * an allocation of a new buffer and copying the previous contents. 435 * an allocation of a new buffer and copying the previous contents.
380 * 436 *
381 * @param prop the properties interface 437 * @param prop the properties interface
382 * @param buf a pointer to the data
383 * @param len the length of the data
384 * @return non-zero when a memory allocation was necessary but failed
385 */
386 cx_attr_nonnull
387 cx_attr_access_r(2, 3)
388 int cxPropertiesFilln(
389 CxProperties *prop,
390 const char *buf,
391 size_t len
392 );
393
394 #ifdef __cplusplus
395 } // extern "C"
396 cx_attr_nonnull
397 static inline int cxPropertiesFill(
398 CxProperties *prop,
399 cxstring str
400 ) {
401 return cxPropertiesFilln(prop, str.ptr, str.length);
402 }
403
404 cx_attr_nonnull
405 static inline int cxPropertiesFill(
406 CxProperties *prop,
407 cxmutstr str
408 ) {
409 return cxPropertiesFilln(prop, str.ptr, str.length);
410 }
411
412 cx_attr_nonnull
413 cx_attr_cstr_arg(2)
414 static inline int cxPropertiesFill(
415 CxProperties *prop,
416 const char *str
417 ) {
418 return cxPropertiesFilln(prop, str, strlen(str));
419 }
420
421 extern "C" {
422 #else // __cplusplus
423 /**
424 * Fills the input buffer with data.
425 *
426 * After calling this function, you can parse the data by calling
427 * cxPropertiesNext().
428 *
429 * @attention The properties interface tries to avoid allocations.
430 * When you use this function and cxPropertiesNext() interleaving,
431 * no allocations are performed. However, you must not free the
432 * pointer to the data in that case. When you invoke the fill
433 * function more than once before calling cxPropertiesNext(),
434 * the additional data is appended - inevitably leading to
435 * an allocation of a new buffer and copying the previous contents.
436 *
437 * @param prop the properties interface
438 * @param str the text to fill in 438 * @param str the text to fill in
439 * @return non-zero when a memory allocation was necessary but failed 439 * @return non-zero when a memory allocation was necessary but failed
440 */ 440 */
441 #define cxPropertiesFill(prop, str) _Generic((str), \ 441 #define cxPropertiesFill(prop, str) _Generic((str), \
442 cxstring: cx_properties_fill_cxstr, \ 442 cxstring: cx_properties_fill_cxstr, \

mercurial