MCPcopy Create free account
hub / github.com/ElementsProject/lightning / bitmap_ffs

Function bitmap_ffs

ccan/ccan/bitmap/bitmap.c:79–125  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

77}
78
79unsigned long bitmap_ffs(const bitmap *b,
80 unsigned long n, unsigned long m)
81{
82 unsigned long an = BIT_ALIGN_UP(n);
83 unsigned long am = BIT_ALIGN_DOWN(m);
84 bitmap_word headmask = BITMAP_WORD_1 >> (n % BITMAP_WORD_BITS);
85 bitmap_word tailmask = ~(BITMAP_WORD_1 >> (m % BITMAP_WORD_BITS));
86
87 assert(m >= n);
88
89 if (am < an) {
90 bitmap_word w = bitmap_bswap(BITMAP_WORD(b, n));
91
92 w &= (headmask & tailmask);
93
94 return w ? am + bitmap_clz(w) : m;
95 }
96
97 if (an > n) {
98 bitmap_word w = bitmap_bswap(BITMAP_WORD(b, n));
99
100 w &= headmask;
101
102 if (w)
103 return BIT_ALIGN_DOWN(n) + bitmap_clz(w);
104 }
105
106 while (an < am) {
107 bitmap_word w = bitmap_bswap(BITMAP_WORD(b, an));
108
109 if (w)
110 return an + bitmap_clz(w);
111
112 an += BITMAP_WORD_BITS;
113 }
114
115 if (m > am) {
116 bitmap_word w = bitmap_bswap(BITMAP_WORD(b, m));
117
118 w &= tailmask;
119
120 if (w)
121 return am + bitmap_clz(w);
122 }
123
124 return m;
125}

Callers 2

test_sizeFunction · 0.85
bitmap_to_blacklistFunction · 0.85

Calls 2

bitmap_bswapFunction · 0.85
bitmap_clzFunction · 0.85

Tested by 1

test_sizeFunction · 0.68