53 |
53 |
54 bool EdgeStore::is_empty() const { |
54 bool EdgeStore::is_empty() const { |
55 return !_edges->has_entries(); |
55 return !_edges->has_entries(); |
56 } |
56 } |
57 |
57 |
58 void EdgeStore::assign_id(EdgeEntry* entry) { |
58 void EdgeStore::on_link(EdgeEntry* entry) { |
59 assert(entry != NULL, "invariant"); |
59 assert(entry != NULL, "invariant"); |
60 assert(entry->id() == 0, "invariant"); |
60 assert(entry->id() == 0, "invariant"); |
61 entry->set_id(++_edge_id_counter); |
61 entry->set_id(++_edge_id_counter); |
62 } |
62 } |
63 |
63 |
64 bool EdgeStore::equals(const Edge& query, uintptr_t hash, const EdgeEntry* entry) { |
64 bool EdgeStore::on_equals(uintptr_t hash, const EdgeEntry* entry) { |
65 assert(entry != NULL, "invariant"); |
65 assert(entry != NULL, "invariant"); |
66 assert(entry->hash() == hash, "invariant"); |
66 assert(entry->hash() == hash, "invariant"); |
67 return true; |
67 return true; |
68 } |
68 } |
69 |
69 |
|
70 void EdgeStore::on_unlink(EdgeEntry* entry) { |
|
71 assert(entry != NULL, "invariant"); |
|
72 // nothing |
|
73 } |
|
74 |
70 #ifdef ASSERT |
75 #ifdef ASSERT |
71 bool EdgeStore::contains(const oop* reference) const { |
76 bool EdgeStore::contains(const oop* reference) const { |
72 return get(reference) != NULL; |
77 return get(reference) != NULL; |
73 } |
78 } |
74 #endif |
79 #endif |
75 |
80 |
76 StoredEdge* EdgeStore::get(const oop* reference) const { |
81 StoredEdge* EdgeStore::get(const oop* reference) const { |
77 assert(reference != NULL, "invariant"); |
82 assert(reference != NULL, "invariant"); |
78 const StoredEdge e(NULL, reference); |
83 EdgeEntry* const entry = _edges->lookup_only((uintptr_t)reference); |
79 EdgeEntry* const entry = _edges->lookup_only(e, (uintptr_t)reference); |
|
80 return entry != NULL ? entry->literal_addr() : NULL; |
84 return entry != NULL ? entry->literal_addr() : NULL; |
81 } |
85 } |
82 |
86 |
83 StoredEdge* EdgeStore::put(const oop* reference) { |
87 StoredEdge* EdgeStore::put(const oop* reference) { |
84 assert(reference != NULL, "invariant"); |
88 assert(reference != NULL, "invariant"); |
85 const StoredEdge e(NULL, reference); |
89 const StoredEdge e(NULL, reference); |
86 assert(NULL == _edges->lookup_only(e, (uintptr_t)reference), "invariant"); |
90 assert(NULL == _edges->lookup_only((uintptr_t)reference), "invariant"); |
87 EdgeEntry& entry = _edges->put(e, (uintptr_t)reference); |
91 EdgeEntry& entry = _edges->put((uintptr_t)reference, e); |
88 return entry.literal_addr(); |
92 return entry.literal_addr(); |
89 } |
93 } |
90 |
94 |
91 traceid EdgeStore::get_id(const Edge* edge) const { |
95 traceid EdgeStore::get_id(const Edge* edge) const { |
92 assert(edge != NULL, "invariant"); |
96 assert(edge != NULL, "invariant"); |
93 EdgeEntry* const entry = _edges->lookup_only(*edge, (uintptr_t)edge->reference()); |
97 EdgeEntry* const entry = _edges->lookup_only((uintptr_t)edge->reference()); |
94 assert(entry != NULL, "invariant"); |
98 assert(entry != NULL, "invariant"); |
95 return entry->id(); |
99 return entry->id(); |
96 } |
100 } |
97 |
101 |
98 traceid EdgeStore::gc_root_id(const Edge* edge) const { |
102 traceid EdgeStore::gc_root_id(const Edge* edge) const { |