2021-11-21 23:59:44 +00:00
|
|
|
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
2022-11-02 00:05:16 +00:00
|
|
|
// SPDX-License-Identifier: LGPL-2.1-or-later
|
2021-08-24 01:07:26 +01:00
|
|
|
|
|
|
|
/**
|
|
|
|
* @file
|
|
|
|
*
|
|
|
|
* Helpers for C arrays.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef DRGN_ARRAY_H
|
|
|
|
#define DRGN_ARRAY_H
|
|
|
|
|
|
|
|
#include "pp.h"
|
|
|
|
#include "util.h"
|
|
|
|
|
|
|
|
/** @cond */
|
|
|
|
#define array_for_each_impl(var, arr, unique_end) \
|
|
|
|
for (typeof((arr)[0]) *var = (arr), \
|
|
|
|
*unique_end = var + array_size(arr); \
|
|
|
|
var < unique_end; var++)
|
|
|
|
/** @endcond */
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Return the number of elements in an array.
|
|
|
|
*
|
|
|
|
* @hideinitializer
|
|
|
|
*/
|
2024-01-04 21:51:18 +00:00
|
|
|
#define array_size(arr) \
|
|
|
|
static_assert_expression(is_array(arr), \
|
|
|
|
"not an array", \
|
|
|
|
sizeof(arr) / sizeof((arr)[0]))
|
2021-08-24 01:07:26 +01:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Iterate over every element in an array.
|
|
|
|
*
|
|
|
|
* The element is declared as `element_type *var` in the scope of the loop.
|
|
|
|
*
|
|
|
|
* @hideinitializer
|
|
|
|
*/
|
|
|
|
#define array_for_each(var, arr) \
|
|
|
|
array_for_each_impl(var, arr, PP_UNIQUE(end))
|
|
|
|
|
|
|
|
#endif /* DRGN_ARRAY_H */
|