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