mirror of
https://github.com/dragonflydb/dragonfly.git
synced 2025-05-11 10:25:47 +02:00
chore(DenseSet): Some code reorder without change in functionality. (#338)
This commit is contained in:
parent
b74d65dee4
commit
2686b9316a
4 changed files with 163 additions and 166 deletions
|
@ -108,18 +108,6 @@ auto DenseSet::Unlink(DenseSet::DensePtr* node) -> DensePtr {
|
|||
return ret;
|
||||
}
|
||||
|
||||
// updates *node with the next item
|
||||
void* DenseSet::UnlinkAndFree(DenseSet::DensePtr* node) {
|
||||
DensePtr unlinked = Unlink(node);
|
||||
void* ret = unlinked.GetObject();
|
||||
|
||||
if (unlinked.IsLink()) {
|
||||
FreeLink(unlinked);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
void DenseSet::ClearInternal() {
|
||||
for (auto it = entries_.begin(); it != entries_.end(); ++it) {
|
||||
while (!it->IsEmpty()) {
|
||||
|
@ -130,6 +118,14 @@ void DenseSet::ClearInternal() {
|
|||
entries_.clear();
|
||||
}
|
||||
|
||||
bool DenseSet::Equal(DensePtr dptr, const void* ptr) const {
|
||||
if (dptr.IsEmpty()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return ObjEqual(dptr.GetObject(), ptr);
|
||||
}
|
||||
|
||||
auto DenseSet::FindEmptyAround(uint32_t bid) -> ChainVectorIterator {
|
||||
if (entries_[bid].IsEmpty()) {
|
||||
return entries_.begin() + bid;
|
||||
|
@ -271,7 +267,7 @@ bool DenseSet::AddInternal(void* ptr) {
|
|||
|
||||
auto DenseSet::Find(const void* ptr, uint32_t bid) const -> const DensePtr* {
|
||||
const DensePtr* curr = &entries_[bid];
|
||||
if (!curr->IsEmpty() && Equal(*curr, ptr)) {
|
||||
if (Equal(*curr, ptr)) {
|
||||
return curr;
|
||||
}
|
||||
|
||||
|
@ -298,31 +294,26 @@ auto DenseSet::Find(const void* ptr, uint32_t bid) const -> const DensePtr* {
|
|||
return nullptr;
|
||||
}
|
||||
|
||||
// Same idea as FindAround but provide the const guarantee
|
||||
bool DenseSet::ContainsInternal(const void* ptr) const {
|
||||
uint32_t bid = BucketId(ptr);
|
||||
return Find(ptr, bid) != nullptr;
|
||||
}
|
||||
void* DenseSet::Delete(DensePtr* ptr) {
|
||||
void* ret = nullptr;
|
||||
|
||||
void* DenseSet::EraseInternal(void* ptr) {
|
||||
uint32_t bid = BucketId(ptr);
|
||||
auto found = Find(ptr, bid);
|
||||
|
||||
if (found == nullptr) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
if (found->IsLink()) {
|
||||
--num_chain_entries_;
|
||||
} else {
|
||||
DCHECK(found->IsObject());
|
||||
if (ptr->IsObject()) {
|
||||
ret = ptr->Raw();
|
||||
ptr->Reset();
|
||||
--num_used_buckets_;
|
||||
} else {
|
||||
DCHECK(ptr->IsLink());
|
||||
|
||||
DenseLinkKey* link = ptr->AsLink();
|
||||
ret = link->Raw();
|
||||
*ptr = link->next;
|
||||
--num_chain_entries_;
|
||||
mr()->deallocate(link, sizeof(DenseLinkKey), alignof(DenseLinkKey));
|
||||
}
|
||||
|
||||
obj_malloc_used_ -= ObjectAllocSize(ptr);
|
||||
void* ret = UnlinkAndFree(found);
|
||||
|
||||
obj_malloc_used_ -= ObjectAllocSize(ret);
|
||||
--size_;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -402,4 +393,15 @@ uint32_t DenseSet::Scan(uint32_t cursor, const ItemCb& cb) const {
|
|||
|
||||
return entries_idx << (32 - capacity_log_);
|
||||
}
|
||||
|
||||
auto DenseSet::NewLink(void* data, DensePtr next) -> DenseLinkKey* {
|
||||
LinkAllocator la(mr());
|
||||
DenseLinkKey* lk = la.allocate(1);
|
||||
la.construct(lk);
|
||||
|
||||
lk->next = next;
|
||||
lk->SetObject(data);
|
||||
return lk;
|
||||
}
|
||||
|
||||
} // namespace dfly
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue