mirror of git://sourceware.org/git/glibc.git
include/array_length.h: add array_foreach[_const] macros
Add simple-to-use iterator macros for arrays. They are used instead
of explicit for statements, like:
/* Test all common speeds */
array_foreach_const (ts, test_speeds)
test (fd, *ts);
In this case, ts will be a const pointer to each of the elements of
test_speeds in turn.
Named array_foreach*() to allow for other kinds of equivalent iterator
macros in the future.
Signed-off-by: "H. Peter Anvin" (Intel) <hpa@zytor.com>
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
This commit is contained in:
parent
be413adedf
commit
c66801f361
|
|
@ -33,4 +33,18 @@
|
|||
VAR must evaluate to an array, not a pointer. */
|
||||
#define array_end(var) (&(var)[array_length (var)])
|
||||
|
||||
/* array_foreach (PTR, ARRAY) iterates over all the elements in an
|
||||
array, assigning the locally defined pointer variable PTR to each
|
||||
element in turn.
|
||||
|
||||
array_foreach_const (PTR, ARRAY) does the same, but *PTR is declared
|
||||
const even if the array is not. */
|
||||
#define array_foreach(ptr, array) \
|
||||
for (__typeof ((array)[0]) *ptr = (array) ; \
|
||||
ptr < array_end (array) ; ptr++)
|
||||
|
||||
#define array_foreach_const(ptr, array) \
|
||||
for (const __typeof ((array)[0]) *ptr = (array) ; \
|
||||
ptr < array_end (array) ; ptr++)
|
||||
|
||||
#endif /* _ARRAY_LENGTH_H */
|
||||
|
|
|
|||
Loading…
Reference in New Issue