667 668 BitMap::idx_t BitMap::count_one_bits() const { 669 init_pop_count_table(); // If necessary. 670 idx_t sum = 0; 671 typedef unsigned char uchar; 672 for (idx_t i = 0; i < size_in_words(); i++) { 673 bm_word_t w = map()[i]; 674 for (size_t j = 0; j < sizeof(bm_word_t); j++) { 675 sum += num_set_bits_from_table(uchar(w & 255)); 676 w >>= 8; 677 } 678 } 679 return sum; 680 } 681 682 void BitMap::print_on_error(outputStream* st, const char* prefix) const { 683 st->print_cr("%s[" PTR_FORMAT ", " PTR_FORMAT ")", 684 prefix, p2i(map()), p2i((char*)map() + (size() >> LogBitsPerByte))); 685 } 686 687 #ifndef PRODUCT 688 689 void BitMap::print_on(outputStream* st) const { 690 tty->print("Bitmap(" SIZE_FORMAT "):", size()); 691 for (idx_t index = 0; index < size(); index++) { 692 tty->print("%c", at(index) ? '1' : '0'); 693 } 694 tty->cr(); 695 } 696 697 #endif | 667 668 BitMap::idx_t BitMap::count_one_bits() const { 669 init_pop_count_table(); // If necessary. 670 idx_t sum = 0; 671 typedef unsigned char uchar; 672 for (idx_t i = 0; i < size_in_words(); i++) { 673 bm_word_t w = map()[i]; 674 for (size_t j = 0; j < sizeof(bm_word_t); j++) { 675 sum += num_set_bits_from_table(uchar(w & 255)); 676 w >>= 8; 677 } 678 } 679 return sum; 680 } 681 682 void BitMap::print_on_error(outputStream* st, const char* prefix) const { 683 st->print_cr("%s[" PTR_FORMAT ", " PTR_FORMAT ")", 684 prefix, p2i(map()), p2i((char*)map() + (size() >> LogBitsPerByte))); 685 } 686 687 void BitMap::write_to(bm_word_t* buffer, size_t buffer_size_in_bytes) const { 688 assert(buffer_size_in_bytes == size_in_bytes(), "must be"); 689 memcpy(buffer, _map, size_in_bytes()); 690 } 691 692 #ifndef PRODUCT 693 694 void BitMap::print_on(outputStream* st) const { 695 tty->print("Bitmap(" SIZE_FORMAT "):", size()); 696 for (idx_t index = 0; index < size(); index++) { 697 tty->print("%c", at(index) ? '1' : '0'); 698 } 699 tty->cr(); 700 } 701 702 #endif |