src/share/vm/utilities/bitMap.inline.hpp

Print this page

        

@@ -48,10 +48,28 @@
 inline void BitMap::clear_bit(idx_t bit) {
   verify_index(bit);
   *word_addr(bit) &= ~bit_mask(bit);
 }
 
+inline bool BitMap::set_bit_with_result(idx_t bit) {
+  verify_index(bit);
+  bm_word_t* addr = word_addr(bit);
+  bm_word_t old_val = *addr;
+  bm_word_t new_val = old_val | bit_mask(bit);
+  *addr = new_val;
+  return (old_val != new_val);
+}
+
+inline bool BitMap::clear_bit_with_result(idx_t bit) {
+  verify_index(bit);
+  bm_word_t* addr = word_addr(bit);
+  bm_word_t old_val = *addr;
+  bm_word_t new_val = old_val & ~bit_mask(bit);
+  *addr = new_val;
+  return (old_val != new_val);
+}
+
 inline bool BitMap::par_set_bit(idx_t bit) {
   verify_index(bit);
   volatile bm_word_t* const addr = word_addr(bit);
   const bm_word_t mask = bit_mask(bit);
   bm_word_t old_val = *addr;