Lines Matching refs:bi

204 bmp_iter_set_init (bitmap_iterator *bi, bitmap map,
207 bi->elt1 = map->first;
208 bi->elt2 = NULL;
213 if (!bi->elt1)
215 bi->elt1 = &bitmap_zero_bits;
219 if (bi->elt1->indx >= start_bit / BITMAP_ELEMENT_ALL_BITS)
221 bi->elt1 = bi->elt1->next;
225 if (bi->elt1->indx != start_bit / BITMAP_ELEMENT_ALL_BITS)
226 start_bit = bi->elt1->indx * BITMAP_ELEMENT_ALL_BITS;
229 bi->word_no = start_bit / BITMAP_WORD_BITS % BITMAP_ELEMENT_WORDS;
230 bi->bits = bi->elt1->bits[bi->word_no];
231 bi->bits >>= start_bit % BITMAP_WORD_BITS;
237 start_bit += !bi->bits;
246 bmp_iter_and_init (bitmap_iterator *bi, bitmap map1, bitmap map2,
249 bi->elt1 = map1->first;
250 bi->elt2 = map2->first;
256 if (!bi->elt1)
258 bi->elt2 = NULL;
262 if (bi->elt1->indx >= start_bit / BITMAP_ELEMENT_ALL_BITS)
264 bi->elt1 = bi->elt1->next;
270 if (!bi->elt2)
272 bi->elt1 = bi->elt2 = &bitmap_zero_bits;
276 if (bi->elt2->indx >= bi->elt1->indx)
278 bi->elt2 = bi->elt2->next;
282 if (bi->elt1->indx == bi->elt2->indx)
286 if (bi->elt1->indx != start_bit / BITMAP_ELEMENT_ALL_BITS)
287 start_bit = bi->elt1->indx * BITMAP_ELEMENT_ALL_BITS;
289 bi->word_no = start_bit / BITMAP_WORD_BITS % BITMAP_ELEMENT_WORDS;
290 bi->bits = bi->elt1->bits[bi->word_no] & bi->elt2->bits[bi->word_no];
291 bi->bits >>= start_bit % BITMAP_WORD_BITS;
297 bi->word_no = BITMAP_ELEMENT_WORDS - 1;
298 bi->bits = 0;
305 start_bit += !bi->bits;
314 bmp_iter_and_compl_init (bitmap_iterator *bi, bitmap map1, bitmap map2,
317 bi->elt1 = map1->first;
318 bi->elt2 = map2->first;
323 if (!bi->elt1)
325 bi->elt1 = &bitmap_zero_bits;
329 if (bi->elt1->indx >= start_bit / BITMAP_ELEMENT_ALL_BITS)
331 bi->elt1 = bi->elt1->next;
335 while (bi->elt2 && bi->elt2->indx < bi->elt1->indx)
336 bi->elt2 = bi->elt2->next;
340 if (bi->elt1->indx != start_bit / BITMAP_ELEMENT_ALL_BITS)
341 start_bit = bi->elt1->indx * BITMAP_ELEMENT_ALL_BITS;
343 bi->word_no = start_bit / BITMAP_WORD_BITS % BITMAP_ELEMENT_WORDS;
344 bi->bits = bi->elt1->bits[bi->word_no];
345 if (bi->elt2 && bi->elt1->indx == bi->elt2->indx)
346 bi->bits &= ~bi->elt2->bits[bi->word_no];
347 bi->bits >>= start_bit % BITMAP_WORD_BITS;
353 start_bit += !bi->bits;
362 bmp_iter_next (bitmap_iterator *bi, unsigned *bit_no)
364 bi->bits >>= 1;
373 bmp_iter_set (bitmap_iterator *bi, unsigned *bit_no)
376 if (bi->bits)
379 while (!(bi->bits & 1))
381 bi->bits >>= 1;
392 bi->word_no++;
397 while (bi->word_no != BITMAP_ELEMENT_WORDS)
399 bi->bits = bi->elt1->bits[bi->word_no];
400 if (bi->bits)
403 bi->word_no++;
407 bi->elt1 = bi->elt1->next;
408 if (!bi->elt1)
410 *bit_no = bi->elt1->indx * BITMAP_ELEMENT_ALL_BITS;
411 bi->word_no = 0;
420 bmp_iter_and (bitmap_iterator *bi, unsigned *bit_no)
423 if (bi->bits)
426 while (!(bi->bits & 1))
428 bi->bits >>= 1;
439 bi->word_no++;
444 while (bi->word_no != BITMAP_ELEMENT_WORDS)
446 bi->bits = bi->elt1->bits[bi->word_no] & bi->elt2->bits[bi->word_no];
447 if (bi->bits)
450 bi->word_no++;
460 bi->elt1 = bi->elt1->next;
461 if (!bi->elt1)
464 while (bi->elt1->indx < bi->elt2->indx);
468 while (bi->elt2->indx < bi->elt1->indx)
470 bi->elt2 = bi->elt2->next;
471 if (!bi->elt2)
475 while (bi->elt1->indx != bi->elt2->indx);
477 *bit_no = bi->elt1->indx * BITMAP_ELEMENT_ALL_BITS;
478 bi->word_no = 0;
487 bmp_iter_and_compl (bitmap_iterator *bi, unsigned *bit_no)
490 if (bi->bits)
493 while (!(bi->bits & 1))
495 bi->bits >>= 1;
506 bi->word_no++;
511 while (bi->word_no != BITMAP_ELEMENT_WORDS)
513 bi->bits = bi->elt1->bits[bi->word_no];
514 if (bi->elt2 && bi->elt2->indx == bi->elt1->indx)
515 bi->bits &= ~bi->elt2->bits[bi->word_no];
516 if (bi->bits)
519 bi->word_no++;
523 bi->elt1 = bi->elt1->next;
524 if (!bi->elt1)
528 while (bi->elt2 && bi->elt2->indx < bi->elt1->indx)
529 bi->elt2 = bi->elt2->next;
531 *bit_no = bi->elt1->indx * BITMAP_ELEMENT_ALL_BITS;
532 bi->word_no = 0;