mirror of
https://github.com/Z3Prover/z3
synced 2026-04-29 23:33:38 +00:00
move, dont copy
This commit is contained in:
parent
b7bf23c3bb
commit
bfc132a4fc
1 changed files with 13 additions and 28 deletions
|
|
@ -129,11 +129,11 @@ template<typename Entry, typename HashProc, typename EqProc>
|
||||||
class core_hashtable : private HashProc, private EqProc {
|
class core_hashtable : private HashProc, private EqProc {
|
||||||
protected:
|
protected:
|
||||||
Entry * m_table;
|
Entry * m_table;
|
||||||
unsigned m_capacity;
|
unsigned m_capacity = 0;
|
||||||
unsigned m_size;
|
unsigned m_size = 0;
|
||||||
unsigned m_num_deleted;
|
unsigned m_num_deleted = 0;
|
||||||
#ifdef HASHTABLE_STATISTICS
|
#ifdef HASHTABLE_STATISTICS
|
||||||
unsigned long long m_st_collision;
|
unsigned long long m_st_collision = 0;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
Entry* alloc_table(unsigned size) {
|
Entry* alloc_table(unsigned size) {
|
||||||
|
|
@ -243,15 +243,10 @@ public:
|
||||||
HashProc const & h = HashProc(),
|
HashProc const & h = HashProc(),
|
||||||
EqProc const & e = EqProc()):
|
EqProc const & e = EqProc()):
|
||||||
HashProc(h),
|
HashProc(h),
|
||||||
EqProc(e) {
|
EqProc(e),
|
||||||
|
m_capacity(initial_capacity) {
|
||||||
SASSERT(is_power_of_two(initial_capacity));
|
SASSERT(is_power_of_two(initial_capacity));
|
||||||
m_table = alloc_table(initial_capacity);
|
m_table = alloc_table(initial_capacity);
|
||||||
m_capacity = initial_capacity;
|
|
||||||
m_size = 0;
|
|
||||||
m_num_deleted = 0;
|
|
||||||
HS_CODE({
|
|
||||||
m_st_collision = 0;
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
core_hashtable(const core_hashtable & source):
|
core_hashtable(const core_hashtable & source):
|
||||||
|
|
@ -261,20 +256,16 @@ public:
|
||||||
m_table = alloc_table(m_capacity);
|
m_table = alloc_table(m_capacity);
|
||||||
copy_table(source.m_table, m_capacity, m_table, m_capacity);
|
copy_table(source.m_table, m_capacity, m_table, m_capacity);
|
||||||
m_size = source.m_size;
|
m_size = source.m_size;
|
||||||
m_num_deleted = 0;
|
|
||||||
HS_CODE({
|
|
||||||
m_st_collision = 0;
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
core_hashtable(core_hashtable && source) noexcept :
|
core_hashtable(core_hashtable && source) noexcept :
|
||||||
HashProc(source),
|
HashProc(source),
|
||||||
EqProc(source),
|
EqProc(source),
|
||||||
m_table(nullptr) {
|
m_table(source.m_table),
|
||||||
m_capacity = source.m_capacity;
|
m_capacity(source.m_capacity),
|
||||||
std::swap(m_table, source.m_table);
|
m_size(source.m_size),
|
||||||
m_size = source.m_size;
|
m_num_deleted(source.m_num_deleted) {
|
||||||
m_num_deleted = source.m_num_deleted;
|
source.m_table = nullptr;
|
||||||
HS_CODE({
|
HS_CODE({
|
||||||
m_st_collision = source.m_st_collision;
|
m_st_collision = source.m_st_collision;
|
||||||
});
|
});
|
||||||
|
|
@ -285,13 +276,7 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
void swap(core_hashtable & source) noexcept {
|
void swap(core_hashtable & source) noexcept {
|
||||||
std::swap(m_table, source.m_table);
|
std::swap(*this, source);
|
||||||
std::swap(m_capacity, source.m_capacity);
|
|
||||||
std::swap(m_size, source.m_size);
|
|
||||||
std::swap(m_num_deleted, source.m_num_deleted);
|
|
||||||
HS_CODE({
|
|
||||||
std::swap(m_st_collision, source.m_st_collision);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void reset() {
|
void reset() {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue