… | |
… | |
278 | for (uint32_t idxvar, mask_ = mask; \ |
278 | for (uint32_t idxvar, mask_ = mask; \ |
279 | mask_ && ((idxvar = ecb_ctz32 (mask_)), mask_ &= ~(1 << idxvar), 1);) |
279 | mask_ && ((idxvar = ecb_ctz32 (mask_)), mask_ &= ~(1 << idxvar), 1);) |
280 | |
280 | |
281 | extern ssize_t slice_alloc; // statistics |
281 | extern ssize_t slice_alloc; // statistics |
282 | |
282 | |
283 | void *salloc_ (int n); |
283 | void *salloc_ (int n) noexcept; |
284 | void *salloc_ (int n, void *src); |
284 | void *salloc_ (int n, void *src) noexcept; |
285 | |
285 | |
286 | // strictly the same as g_slice_alloc, but never returns 0 |
286 | // strictly the same as g_slice_alloc, but never returns 0 |
287 | template<typename T> |
287 | template<typename T> |
288 | inline T *salloc (int n = 1) { return (T *)salloc_ (n * sizeof (T)); } |
288 | inline T *salloc (int n = 1) { return (T *)salloc_ (n * sizeof (T)); } |
289 | |
289 | |