summaryrefslogtreecommitdiff
path: root/sql/sql_bitmap.h
diff options
context:
space:
mode:
Diffstat (limited to 'sql/sql_bitmap.h')
-rw-r--r--sql/sql_bitmap.h27
1 files changed, 9 insertions, 18 deletions
diff --git a/sql/sql_bitmap.h b/sql/sql_bitmap.h
index 765e4ee2725..02dc8198c7c 100644
--- a/sql/sql_bitmap.h
+++ b/sql/sql_bitmap.h
@@ -27,29 +27,20 @@
#include <my_bitmap.h>
#include <my_bit.h>
-/* An iterator to quickly walk over bits in unlonglong bitmap. */
+
+/* An iterator to quickly walk over bits in ulonglong bitmap. */
class Table_map_iterator
{
ulonglong bmp;
- uint no;
public:
- Table_map_iterator(ulonglong t) : bmp(t), no(0) {}
- int next_bit()
+ Table_map_iterator(ulonglong t): bmp(t){}
+ uint next_bit()
{
- static const char last_bit[16] = { 32, 0, 1, 0,
- 2, 0, 1, 0,
- 3, 0, 1, 0,
- 2, 0, 1, 0 };
- uint bit;
- while ((bit= last_bit[bmp & 0xF]) == 32)
- {
- no += 4;
- bmp= bmp >> 4;
- if (!bmp)
- return BITMAP_END;
- }
- bmp &= ~(1LL << bit);
- return no + bit;
+ if (!bmp)
+ return BITMAP_END;
+ uint bit= my_find_first_bit(bmp);
+ bmp &= ~(1ULL << bit);
+ return bit;
}
int operator++(int) { return next_bit(); }
enum { BITMAP_END= 64 };