70 // Returns true if the card counts table has been reserved and committed. |
70 // Returns true if the card counts table has been reserved and committed. |
71 bool has_count_table() { |
71 bool has_count_table() { |
72 return has_reserved_count_table() && _committed_max_card_num > 0; |
72 return has_reserved_count_table() && _committed_max_card_num > 0; |
73 } |
73 } |
74 |
74 |
75 void check_card_num(size_t card_num, const char* msg) { |
|
76 assert(card_num >= 0 && card_num < _committed_max_card_num, msg); |
|
77 } |
|
78 |
|
79 size_t ptr_2_card_num(const jbyte* card_ptr) { |
75 size_t ptr_2_card_num(const jbyte* card_ptr) { |
80 assert(card_ptr >= _ct_bot, |
76 assert(card_ptr >= _ct_bot, |
81 err_msg("Inavalied card pointer: " |
77 err_msg("Invalid card pointer: " |
82 "card_ptr: " PTR_FORMAT ", " |
78 "card_ptr: " PTR_FORMAT ", " |
83 "_ct_bot: " PTR_FORMAT, |
79 "_ct_bot: " PTR_FORMAT, |
84 card_ptr, _ct_bot)); |
80 card_ptr, _ct_bot)); |
85 size_t card_num = pointer_delta(card_ptr, _ct_bot, sizeof(jbyte)); |
81 size_t card_num = pointer_delta(card_ptr, _ct_bot, sizeof(jbyte)); |
86 check_card_num(card_num, |
82 assert(card_num >= 0 && card_num < _committed_max_card_num, |
87 err_msg("card pointer out of range: " PTR_FORMAT, card_ptr)); |
83 err_msg("card pointer out of range: " PTR_FORMAT, card_ptr)); |
88 return card_num; |
84 return card_num; |
89 } |
85 } |
90 |
86 |
91 jbyte* card_num_2_ptr(size_t card_num) { |
87 jbyte* card_num_2_ptr(size_t card_num) { |
92 check_card_num(card_num, |
88 assert(card_num >= 0 && card_num < _committed_max_card_num, |
93 err_msg("card num out of range: "SIZE_FORMAT, card_num)); |
89 err_msg("card num out of range: "SIZE_FORMAT, card_num)); |
94 return (jbyte*) (_ct_bot + card_num); |
90 return (jbyte*) (_ct_bot + card_num); |
95 } |
91 } |
96 |
92 |
97 // Helper routine. |
93 // Helper routine. |
98 // Returns the number of cards that can be counted by the given committed |
94 // Returns the number of cards that can be counted by the given committed |