Add VARRAY_FOREACH and VPTRS_ITER macros to iterate over arrays and pointer arrays #4239
+73
−17
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
These patches add two macros, semantic patches to start using them and the respective changes:
The
VARRAY_FOREACH
macro is intended to simplify loops over elements of an array using pointer arithmetic instead of an array index.The usual pattern of iterating over the array index and then accessing the i-th element of the array is replaced with calculating the end pointer and looping over the array elements.
The macro basically implements
This pattern is more efficient but less clear to read when written out. The macro is similar to the
*_FOREACH
pattern which we already use in many other places with trees, lists and queues, but declares the loop variable locally.The second macro
VPTRS_ITER
further simplifies our "array of pointers" case as, for example, used in struct strands.Here, the loop variable is to be declared outside the macro to support keeping found elements from within the loop.