array.inc 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. type
  2. Ppw_array = ^Tpw_array;
  3. Tpw_array = record
  4. data : pointer;
  5. size : Tsize_t;
  6. alloc : Tsize_t;
  7. extend : Tsize_t;
  8. end;
  9. {
  10. static inline void pw_array_init(struct pw_array *arr, size_t extend)
  11. arr->data =
  12. # 92 "/usr/include/pipewire-0.3/pipewire/array.h" 3 4
  13. ((void *)0)
  14. # 92 "/usr/include/pipewire-0.3/pipewire/array.h"
  15. ;
  16. arr->size = arr->alloc = 0;
  17. arr->extend = extend;
  18. static inline void pw_array_clear(struct pw_array *arr)
  19. free(arr->data);
  20. pw_array_init(arr, arr->extend);
  21. static inline void pw_array_reset(struct pw_array *arr)
  22. arr->size = 0;
  23. static inline int pw_array_ensure_size(struct pw_array *arr, size_t size)
  24. size_t alloc, need;
  25. alloc = arr->alloc;
  26. need = arr->size + size;
  27. if ((__builtin_expect(!!(alloc < need),0)))
  28. void *data;
  29. alloc = ( __typeof__(alloc) _max_a = (alloc); __typeof__(arr->extend) _max_b = (arr->extend); (__builtin_expect(!!(_max_a > _max_b),1)) ? _max_a : _max_b; );
  30. do if ((__builtin_expect(!!(!(alloc != 0)),0))) fprintf(
  31. # 121 "/usr/include/pipewire-0.3/pipewire/array.h" 3 4
  32. stderr
  33. # 121 "/usr/include/pipewire-0.3/pipewire/array.h"
  34. , "'%s' failed at %s:%u %s()\n", "alloc != 0" , "/usr/include/pipewire-0.3/pipewire/array.h", 121, __func__); abort(); while (
  35. # 121 "/usr/include/pipewire-0.3/pipewire/array.h" 3 4
  36. 0
  37. # 121 "/usr/include/pipewire-0.3/pipewire/array.h"
  38. );
  39. while (alloc < need)
  40. alloc *= 2;
  41. if ((__builtin_expect(!!((data = realloc(arr->data, alloc)) ==
  42. # 124 "/usr/include/pipewire-0.3/pipewire/array.h" 3 4
  43. ((void *)0)
  44. # 124 "/usr/include/pipewire-0.3/pipewire/array.h"
  45. ),0)))
  46. return -
  47. # 125 "/usr/include/pipewire-0.3/pipewire/array.h" 3 4
  48. (*__errno_location ())
  49. # 125 "/usr/include/pipewire-0.3/pipewire/array.h"
  50. ;
  51. arr->data = data;
  52. arr->alloc = alloc;
  53. return 0;
  54. static inline void *pw_array_add(struct pw_array *arr, size_t size)
  55. void *p;
  56. if (pw_array_ensure_size(arr, size) < 0)
  57. return
  58. # 139 "/usr/include/pipewire-0.3/pipewire/array.h" 3 4
  59. ((void *)0)
  60. # 139 "/usr/include/pipewire-0.3/pipewire/array.h"
  61. ;
  62. p = ((void*)((uintptr_t)(arr->data) + (ptrdiff_t)(arr->size)));
  63. arr->size += size;
  64. return p;
  65. static inline void *pw_array_add_fixed(struct pw_array *arr, size_t size)
  66. void *p;
  67. if ((__builtin_expect(!!(arr->alloc < arr->size + size),0)))
  68. # 154 "/usr/include/pipewire-0.3/pipewire/array.h" 3 4
  69. (*__errno_location ())
  70. # 154 "/usr/include/pipewire-0.3/pipewire/array.h"
  71. =
  72. # 154 "/usr/include/pipewire-0.3/pipewire/array.h" 3 4
  73. 28
  74. # 154 "/usr/include/pipewire-0.3/pipewire/array.h"
  75. ;
  76. return
  77. # 155 "/usr/include/pipewire-0.3/pipewire/array.h" 3 4
  78. ((void *)0)
  79. # 155 "/usr/include/pipewire-0.3/pipewire/array.h"
  80. ;
  81. p = ((void*)((uintptr_t)(arr->data) + (ptrdiff_t)(arr->size)));
  82. arr->size += size;
  83. return p;
  84. }