src/share/vm/gc_implementation/g1/sparsePRT.cpp
Print this page
rev 6361 : 8042474: Clean up duplicated code in RSHashTable
Summary: Removed duplicate code in RSHashTable to fetch SparsePRTEntries
Reviewed-by:
Contributed-by: Andreas Sjoberg <andreas.sjoberg@oracle.com>
*** 1,7 ****
/*
! * Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
--- 1,7 ----
/*
! * Copyright (c) 2001, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*** 192,218 ****
assert(e->num_valid_cards() > 0, "Postcondition");
return res != SparsePRTEntry::overflow;
}
bool RSHashTable::get_cards(RegionIdx_t region_ind, CardIdx_t* cards) {
- int ind = (int) (region_ind & capacity_mask());
- int cur_ind = _buckets[ind];
- SparsePRTEntry* cur;
- while (cur_ind != NullEntry &&
- (cur = entry(cur_ind))->r_ind() != region_ind) {
- cur_ind = cur->next_index();
- }
! if (cur_ind == NullEntry) return false;
// Otherwise...
! assert(cur->r_ind() == region_ind, "Postcondition of loop + test above.");
! assert(cur->num_valid_cards() > 0, "Inv");
! cur->copy_cards(cards);
return true;
}
! SparsePRTEntry* RSHashTable::get_entry(RegionIdx_t region_ind) {
int ind = (int) (region_ind & capacity_mask());
int cur_ind = _buckets[ind];
SparsePRTEntry* cur;
while (cur_ind != NullEntry &&
(cur = entry(cur_ind))->r_ind() != region_ind) {
--- 192,212 ----
assert(e->num_valid_cards() > 0, "Postcondition");
return res != SparsePRTEntry::overflow;
}
bool RSHashTable::get_cards(RegionIdx_t region_ind, CardIdx_t* cards) {
! SparsePRTEntry* entry = get_entry(region_ind);
! if (entry == NULL) {
! return false;
! }
// Otherwise...
! entry->copy_cards(cards);
return true;
}
! SparsePRTEntry* RSHashTable::get_entry(RegionIdx_t region_ind) const {
int ind = (int) (region_ind & capacity_mask());
int cur_ind = _buckets[ind];
SparsePRTEntry* cur;
while (cur_ind != NullEntry &&
(cur = entry(cur_ind))->r_ind() != region_ind) {
*** 245,275 ****
_occupied_entries--;
return true;
}
SparsePRTEntry*
- RSHashTable::entry_for_region_ind(RegionIdx_t region_ind) const {
- assert(occupied_entries() < capacity(), "Precondition");
- int ind = (int) (region_ind & capacity_mask());
- int cur_ind = _buckets[ind];
- SparsePRTEntry* cur;
- while (cur_ind != NullEntry &&
- (cur = entry(cur_ind))->r_ind() != region_ind) {
- cur_ind = cur->next_index();
- }
-
- if (cur_ind != NullEntry) {
- assert(cur->r_ind() == region_ind, "Loop postcondition + test");
- return cur;
- } else {
- return NULL;
- }
- }
-
- SparsePRTEntry*
RSHashTable::entry_for_region_ind_create(RegionIdx_t region_ind) {
! SparsePRTEntry* res = entry_for_region_ind(region_ind);
if (res == NULL) {
int new_ind = alloc_entry();
assert(0 <= new_ind && (size_t)new_ind < capacity(), "There should be room.");
res = entry(new_ind);
res->init(region_ind);
--- 239,250 ----
_occupied_entries--;
return true;
}
SparsePRTEntry*
RSHashTable::entry_for_region_ind_create(RegionIdx_t region_ind) {
! SparsePRTEntry* res = get_entry(region_ind);
if (res == NULL) {
int new_ind = alloc_entry();
assert(0 <= new_ind && (size_t)new_ind < capacity(), "There should be room.");
res = entry(new_ind);
res->init(region_ind);
*** 363,373 ****
// Otherwise, there were no entry.
return false;
}
bool RSHashTable::contains_card(RegionIdx_t region_index, CardIdx_t card_index) const {
! SparsePRTEntry* e = entry_for_region_ind(region_index);
return (e != NULL && e->contains_card(card_index));
}
size_t RSHashTable::mem_size() const {
return sizeof(RSHashTable) +
--- 338,348 ----
// Otherwise, there were no entry.
return false;
}
bool RSHashTable::contains_card(RegionIdx_t region_index, CardIdx_t card_index) const {
! SparsePRTEntry* e = get_entry(region_index);
return (e != NULL && e->contains_card(card_index));
}
size_t RSHashTable::mem_size() const {
return sizeof(RSHashTable) +