Skip to content

Commit e46d08f

Browse files
committed
libsepol: add ebitmap iterator wrapper with startnode
Similar like ebitmap_for_each_bit() iterates over all bits of an ebitmap add ebitmap_for_each_bit_starting() iterating over all bits starting from a specific node and bit, which can be from an outer iteration. Signed-off-by: Christian Göttsche <[email protected]> --- v4: merge two statements into for loop initializer v2: * use _after suffix * reorder parameters
1 parent e81a05a commit e46d08f

File tree

1 file changed

+6
-0
lines changed

1 file changed

+6
-0
lines changed

libsepol/include/sepol/policydb/ebitmap.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,12 @@ static inline int ebitmap_node_get_bit(const ebitmap_node_t * n, unsigned int bi
8080
#define ebitmap_for_each_positive_bit(e, n, bit) \
8181
ebitmap_for_each_bit(e, n, bit) if (ebitmap_node_get_bit(n, bit)) \
8282

83+
#define ebitmap_for_each_bit_after(e, n, bit, startnode, startbit) \
84+
for (n = startnode, bit = ebitmap_next(&n, startbit); bit < ebitmap_length(e); bit = ebitmap_next(&n, bit)) \
85+
86+
#define ebitmap_for_each_positive_bit_after(e, n, bit, startnode, startbit) \
87+
ebitmap_for_each_bit_after(e, n, bit, startnode, startbit) if (ebitmap_node_get_bit(n, bit)) \
88+
8389
extern int ebitmap_cmp(const ebitmap_t * e1, const ebitmap_t * e2);
8490
extern int ebitmap_or(ebitmap_t * dst, const ebitmap_t * e1, const ebitmap_t * e2);
8591
extern int ebitmap_union(ebitmap_t * dst, const ebitmap_t * e1);

0 commit comments

Comments
 (0)