Feature #656 ยป 0002-Add-range_adjc_iterate-and-related-macros.patch
| common/map.h | ||
|---|---|---|
|     } cardinal_adjc_iterate_end;                                               \ | ||
|   } cardinal_adjc_iterate_end; | ||
| /* Helper for range_adjc_*_iterate */ | ||
| #define _RANGE_DIRLIST(_range, _nmap)                         \ | ||
|   ((_range) == REQ_RANGE_ADJACENT ? (_nmap)->valid_dirs       \ | ||
|    : (_range) == REQ_RANGE_CADJACENT ? (_nmap)->cardinal_dirs \ | ||
|    : nullptr) | ||
| #define _RANGE_DIRCOUNT(_range, _nmap)                            \ | ||
|   ((_range) == REQ_RANGE_ADJACENT ? (_nmap)->num_valid_dirs       \ | ||
|    : (_range) == REQ_RANGE_CADJACENT ? (_nmap)->num_cardinal_dirs \ | ||
|    : 0) | ||
| /* Iterate through either adjacent or cardinally adjacent tiles (or none) | ||
|  * depending on the given requirement range. The range must not change | ||
|  * during iteration. */ | ||
| #define range_adjc_iterate(nmap, center_tile, range, itr_tile) \ | ||
|   range_adjc_dir_iterate(nmap, center_tile, range, itr_tile, _dir_itr##itr_tile) | ||
| #define range_adjc_iterate_end range_adjc_dir_iterate_end | ||
| #define range_adjc_dir_iterate(nmap, center_tile, range, itr_tile, dir_itr) \ | ||
|   adjc_dirlist_iterate(nmap, center_tile, itr_tile, dir_itr,                \ | ||
|                 _RANGE_DIRLIST(range, nmap), _RANGE_DIRCOUNT(range, nmap)) | ||
| #define range_adjc_dir_iterate_end adjc_dirlist_iterate_end | ||
| #define range_adjc_dir_base_iterate(nmap, center_tile, range, dir_itr)    \ | ||
|   adjc_dirlist_base_iterate(nmap, center_tile, dir_itr,                   \ | ||
|               _RANGE_DIRLIST(range, nmap), _RANGE_DIRCOUNT(range, nmap)) | ||
| #define range_adjc_dir_base_iterate_end adjc_dirlist_base_iterate_end | ||
| /* Iterate through all tiles adjacent to a tile using the given list of | ||
|  * directions. _dir is the directional value, (center_x, center_y) is | ||
|  * the center tile (which must be normalized). The center tile is not | ||
|  * included in the iteration. | ||
|  * | ||
|  * This macro should not be used directly. Instead, use adjc_iterate, | ||
|  * cardinal_adjc_iterate, or related iterators. */ | ||
|  * cardinal_adjc_iterate, range_adjc_iterate, or related iterators. */ | ||
| #define adjc_dirlist_iterate(nmap, center_tile, _tile, _dir,                \ | ||
|                              dirlist, dircount)                             \ | ||
| {                                                                           \ | ||