Add constant methods to td::Container.
This commit is contained in:
parent
aa8c5ec1c9
commit
d12ca158c4
@ -28,6 +28,14 @@ class Container {
|
|||||||
return &slots_[slot_id].data;
|
return &slots_[slot_id].data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const DataT *get(Id id) const {
|
||||||
|
int32 slot_id = decode_id(id);
|
||||||
|
if (slot_id == -1) {
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
return &slots_[slot_id].data;
|
||||||
|
}
|
||||||
|
|
||||||
void erase(Id id) {
|
void erase(Id id) {
|
||||||
int32 slot_id = decode_id(id);
|
int32 slot_id = decode_id(id);
|
||||||
if (slot_id == -1) {
|
if (slot_id == -1) {
|
||||||
@ -60,7 +68,7 @@ class Container {
|
|||||||
return static_cast<uint8>(id);
|
return static_cast<uint8>(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
vector<Id> ids() {
|
vector<Id> ids() const {
|
||||||
vector<bool> is_bad(slots_.size(), false);
|
vector<bool> is_bad(slots_.size(), false);
|
||||||
for (auto id : empty_slots_) {
|
for (auto id : empty_slots_) {
|
||||||
is_bad[id] = true;
|
is_bad[id] = true;
|
||||||
@ -73,6 +81,7 @@ class Container {
|
|||||||
}
|
}
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class F>
|
template <class F>
|
||||||
void for_each(const F &f) {
|
void for_each(const F &f) {
|
||||||
auto ids = this->ids();
|
auto ids = this->ids();
|
||||||
@ -80,13 +89,24 @@ class Container {
|
|||||||
f(id, *get(id));
|
f(id, *get(id));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <class F>
|
||||||
|
void for_each(const F &f) const {
|
||||||
|
auto ids = this->ids();
|
||||||
|
for (auto id : ids) {
|
||||||
|
f(id, *get(id));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
size_t size() const {
|
size_t size() const {
|
||||||
CHECK(empty_slots_.size() <= slots_.size());
|
CHECK(empty_slots_.size() <= slots_.size());
|
||||||
return slots_.size() - empty_slots_.size();
|
return slots_.size() - empty_slots_.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool empty() const {
|
bool empty() const {
|
||||||
return size() == 0;
|
return size() == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void clear() {
|
void clear() {
|
||||||
*this = Container<DataT>();
|
*this = Container<DataT>();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user