~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/sql_bitmap.h

  • Committer: Brian Aker
  • Date: 2008-11-03 21:00:47 UTC
  • mfrom: (520.9.5 devel)
  • Revision ID: brian@tangent.org-20081103210047-wfkeyyefrfl2vh4l
Merge from Monty

Show diffs side-by-side

added added

removed removed

Lines of Context:
217
217
extern key_map key_map_full;          /* Should be threaded as const */
218
218
extern const char *primary_key_name;
219
219
 
220
 
 
221
 
/* An iterator to quickly walk over bits in unint64_t bitmap. */
222
 
class Table_map_iterator
223
 
{
224
 
  uint64_t bmp;
225
 
  uint32_t no;
226
 
public:
227
 
  Table_map_iterator(uint64_t t) : bmp(t), no(0) {}
228
 
  int next_bit()
229
 
  {
230
 
    static const char last_bit[16]= {32, 0, 1, 0, 
231
 
                                      2, 0, 1, 0, 
232
 
                                      3, 0, 1, 0,
233
 
                                      2, 0, 1, 0};
234
 
    uint32_t bit;
235
 
    while ((bit= last_bit[bmp & 0xF]) == 32)
236
 
    {
237
 
      no += 4;
238
 
      bmp= bmp >> 4;
239
 
      if (!bmp)
240
 
        return BITMAP_END;
241
 
    }
242
 
    bmp &= ~(1 << bit);
243
 
    return no + bit;
244
 
  }
245
 
  enum { BITMAP_END= 64 };
246
 
};
247
 
 
248
 
 
249
 
#if 0
250
 
void print_bits(table_map bmp)
251
 
{
252
 
  Table_map_iterator it(bmp);
253
 
  int i, first= 1;
254
 
  fprintf(stderr, "0x%llx = ", bmp);
255
 
  while ((i= it.next_bit()) != Table_map_iterator::BITMAP_END)
256
 
  {
257
 
    fprintf(stderr, " %s 2^%d", (first?"":"+"), i);
258
 
    if (first)
259
 
      first= 0;
260
 
  }
261
 
  fprintf(stderr, "\n");
262
 
}
263
 
 
264
 
int main()
265
 
{
266
 
  print_bits(1024);
267
 
  print_bits(3);
268
 
  print_bits(0xF);
269
 
  print_bits(0xF0);
270
 
  print_bits(35);
271
 
  print_bits(1LL<<63);
272
 
  print_bits(0);
273
 
  print_bits(-1LL);
274
 
}
275
 
#endif
276
 
 
277
220
#endif /* _SQL_BITMAP_H_ */