19 size_t count()
const {
20 return m_Objects.
count();
23 return m_Objects.
begin();
26 return m_Objects.
end();
28 ReverseIterator rbegin() {
31 ReverseIterator rend() {
32 return m_Objects.
rend();
35 bool tryPushBack(
Object*
object) {
36 assert(
object && !m_HasReservation);
45 assert(!m_HasReservation);
52 m_ReservedAddress = address;
53 m_HasReservation =
true;
57 void publishBack(
Object*
object) {
58 assert(m_HasReservation &&
object && object->address() == m_ReservedAddress);
59 Object** slot = m_Index.
find(m_ReservedAddress);
60 assert(slot && !*slot);
62 *m_Objects.
rbegin() = object;
63 m_HasReservation =
false;
68 if (m_HasReservation) {
70 m_Index.
remove(m_ReservedAddress);
71 m_HasReservation =
false;
73 m_Index.
remove(object->address());
79 assert(!m_HasReservation && *it);
80 m_Index.
remove((*it)->address());
81 return m_Objects.
erase(it);
83 ReverseIterator erase(ReverseIterator& it) {
84 assert(!m_HasReservation && *it);
85 m_Index.
remove((*it)->address());
86 return m_Objects.
erase(it);
89 Object* find(uintptr_t address,
size_t* objectVisits =
nullptr)
const {
94 if (!m_Index.
floorBound(address, start,
object))
98 if (!
object && (!start || !m_Index.
floorBound(start - 1, start,
object)))
104 return object->matches(address) ? object :
nullptr;
112 uintptr_t m_ReservedAddress = 0;
113 bool m_HasReservation =
false;