mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-09-21 09:10:48 +00:00
Merge
This commit is contained in:
commit
472116b9e7
@ -209,8 +209,7 @@ private:
|
|||||||
for (const auto & x : small)
|
for (const auto & x : small)
|
||||||
tmp_medium->insert(x);
|
tmp_medium->insert(x);
|
||||||
|
|
||||||
new (&medium) std::unique_ptr<Medium>{ std::move(tmp_medium) };
|
medium = tmp_medium.release();
|
||||||
|
|
||||||
setContainerType(details::ContainerType::MEDIUM);
|
setContainerType(details::ContainerType::MEDIUM);
|
||||||
|
|
||||||
if (current_memory_tracker)
|
if (current_memory_tracker)
|
||||||
@ -239,8 +238,7 @@ private:
|
|||||||
destroy();
|
destroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
new (&large) std::unique_ptr<Large>{ std::move(tmp_large) };
|
large = tmp_large.release();
|
||||||
|
|
||||||
setContainerType(details::ContainerType::LARGE);
|
setContainerType(details::ContainerType::LARGE);
|
||||||
|
|
||||||
if (current_memory_tracker)
|
if (current_memory_tracker)
|
||||||
@ -256,13 +254,17 @@ private:
|
|||||||
|
|
||||||
if (container_type == details::ContainerType::MEDIUM)
|
if (container_type == details::ContainerType::MEDIUM)
|
||||||
{
|
{
|
||||||
medium.std::unique_ptr<Medium>::~unique_ptr();
|
delete medium;
|
||||||
|
medium = nullptr;
|
||||||
|
|
||||||
if (current_memory_tracker)
|
if (current_memory_tracker)
|
||||||
current_memory_tracker->free(sizeof(medium));
|
current_memory_tracker->free(sizeof(medium));
|
||||||
}
|
}
|
||||||
else if (container_type == details::ContainerType::LARGE)
|
else if (container_type == details::ContainerType::LARGE)
|
||||||
{
|
{
|
||||||
large.std::unique_ptr<Large>::~unique_ptr();
|
delete large;
|
||||||
|
large = nullptr;
|
||||||
|
|
||||||
if (current_memory_tracker)
|
if (current_memory_tracker)
|
||||||
current_memory_tracker->free(sizeof(large));
|
current_memory_tracker->free(sizeof(large));
|
||||||
}
|
}
|
||||||
@ -282,6 +284,7 @@ private:
|
|||||||
|
|
||||||
void setContainerType(details::ContainerType t)
|
void setContainerType(details::ContainerType t)
|
||||||
{
|
{
|
||||||
|
address &= mask;
|
||||||
address |= static_cast<UInt8>(t);
|
address |= static_cast<UInt8>(t);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -299,11 +302,11 @@ private:
|
|||||||
Small small;
|
Small small;
|
||||||
union
|
union
|
||||||
{
|
{
|
||||||
std::unique_ptr<Medium> medium;
|
Medium * medium;
|
||||||
std::unique_ptr<Large> large;
|
Large * large;
|
||||||
UInt64 address = 0;
|
UInt64 address = 0;
|
||||||
};
|
};
|
||||||
static const UInt64 mask = 0xFFFFFFFC;
|
static const UInt64 mask = 0xFFFFFFFFFFFFFFFC;
|
||||||
static const UInt32 medium_set_size_max = 1UL << medium_set_power2_max;
|
static const UInt32 medium_set_size_max = 1UL << medium_set_power2_max;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user