mirror of
https://github.com/ETLCPP/etl.git
synced 2026-06-26 20:38:45 +08:00
Merge remote-tracking branch 'origin/development'
This commit is contained in:
commit
2cf1fded21
@ -527,7 +527,6 @@ namespace etl
|
||||
|
||||
//*************************************************************************
|
||||
/// Erases the value at the specified position.
|
||||
/// Clears the link after erasing if CHECKED.
|
||||
//*************************************************************************
|
||||
iterator erase_after(iterator position)
|
||||
{
|
||||
@ -544,36 +543,32 @@ namespace etl
|
||||
|
||||
//*************************************************************************
|
||||
/// Erases a range of elements.
|
||||
/// Clears the links after erasing if CHECKED.
|
||||
//*************************************************************************
|
||||
iterator erase_after(iterator first, iterator last)
|
||||
{
|
||||
link_type* p_first = first.p_value;
|
||||
link_type* p_last = last.p_value;
|
||||
link_type* p_next = p_first->etl_next;
|
||||
|
||||
// Join the ends.
|
||||
etl::link<link_type>(p_first, p_last);
|
||||
|
||||
p_first = p_next;
|
||||
|
||||
// Erase the ones in between.
|
||||
while (p_first != p_last)
|
||||
if (first != last)
|
||||
{
|
||||
// One less.
|
||||
--current_size;
|
||||
current_size -= std::distance(first, last) - 1;
|
||||
|
||||
p_next = p_first->etl_next; // Remember the next link.
|
||||
p_first = p_next; // Move to the next link.
|
||||
}
|
||||
link_type* p_first = first.p_value;
|
||||
link_type* p_last = last.p_value;
|
||||
link_type* p_next = p_first->etl_next;
|
||||
|
||||
if (p_next == nullptr)
|
||||
{
|
||||
return end();
|
||||
// Join the ends.
|
||||
etl::link<link_type>(p_first, p_last);
|
||||
|
||||
if (p_next == nullptr)
|
||||
{
|
||||
return end();
|
||||
}
|
||||
else
|
||||
{
|
||||
return last;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return iterator(*static_cast<value_type*>(p_last));
|
||||
return last;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -872,6 +872,7 @@ namespace etl
|
||||
if (icurrent != bucket.end())
|
||||
{
|
||||
bucket.erase_after(iprevious);
|
||||
pnodepool->release(*icurrent);
|
||||
count = 1;
|
||||
}
|
||||
|
||||
@ -899,6 +900,7 @@ namespace etl
|
||||
}
|
||||
|
||||
bucket.erase_after(iprevious);
|
||||
pnodepool->release(*icurrent);
|
||||
|
||||
return inext;
|
||||
}
|
||||
@ -940,8 +942,17 @@ namespace etl
|
||||
}
|
||||
|
||||
// Erase the range.
|
||||
local_iterator irelease = iprevious;
|
||||
++irelease;
|
||||
|
||||
ibucket->erase_after(iprevious, iend);
|
||||
|
||||
while (irelease != iend)
|
||||
{
|
||||
pnodepool->release(*irelease);
|
||||
++irelease;
|
||||
}
|
||||
|
||||
// At the end of this bucket?
|
||||
if (iend == ibucket->end())
|
||||
{
|
||||
|
||||
@ -758,6 +758,7 @@ namespace etl
|
||||
if (icurrent->key_value_pair.first == key)
|
||||
{
|
||||
bucket.erase_after(iprevious);
|
||||
pnodepool->release(*icurrent);
|
||||
++count;
|
||||
icurrent = iprevious;
|
||||
}
|
||||
@ -793,6 +794,7 @@ namespace etl
|
||||
}
|
||||
|
||||
bucket.erase_after(iprevious);
|
||||
pnodepool->release(*icurrent);
|
||||
|
||||
return inext;
|
||||
}
|
||||
@ -834,8 +836,17 @@ namespace etl
|
||||
}
|
||||
|
||||
// Erase the range.
|
||||
local_iterator irelease = iprevious;
|
||||
++irelease;
|
||||
|
||||
ibucket->erase_after(iprevious, iend);
|
||||
|
||||
while (irelease != iend)
|
||||
{
|
||||
pnodepool->release(*irelease);
|
||||
++irelease;
|
||||
}
|
||||
|
||||
// At the end of this bucket?
|
||||
if (iend == ibucket->end())
|
||||
{
|
||||
|
||||
@ -750,6 +750,7 @@ namespace etl
|
||||
if (icurrent->key == key)
|
||||
{
|
||||
bucket.erase_after(iprevious);
|
||||
pnodepool->release(*icurrent);
|
||||
++count;
|
||||
icurrent = iprevious;
|
||||
}
|
||||
@ -785,6 +786,7 @@ namespace etl
|
||||
}
|
||||
|
||||
bucket.erase_after(iprevious);
|
||||
pnodepool->release(*icurrent);
|
||||
|
||||
return inext;
|
||||
}
|
||||
@ -826,8 +828,17 @@ namespace etl
|
||||
}
|
||||
|
||||
// Erase the range.
|
||||
local_iterator irelease = iprevious;
|
||||
++irelease;
|
||||
|
||||
ibucket->erase_after(iprevious, iend);
|
||||
|
||||
while (irelease != iend)
|
||||
{
|
||||
pnodepool->release(*irelease);
|
||||
++irelease;
|
||||
}
|
||||
|
||||
// At the end of this bucket?
|
||||
if (iend == ibucket->end())
|
||||
{
|
||||
|
||||
@ -758,6 +758,7 @@ namespace etl
|
||||
if (icurrent != bucket.end())
|
||||
{
|
||||
bucket.erase_after(iprevious);
|
||||
pnodepool->release(*icurrent);
|
||||
count = 1;
|
||||
}
|
||||
|
||||
@ -785,6 +786,7 @@ namespace etl
|
||||
}
|
||||
|
||||
bucket.erase_after(iprevious);
|
||||
pnodepool->release(*icurrent);
|
||||
|
||||
return inext;
|
||||
}
|
||||
@ -826,8 +828,17 @@ namespace etl
|
||||
}
|
||||
|
||||
// Erase the range.
|
||||
local_iterator irelease = iprevious;
|
||||
++irelease;
|
||||
|
||||
ibucket->erase_after(iprevious, iend);
|
||||
|
||||
while (irelease != iend)
|
||||
{
|
||||
pnodepool->release(*irelease);
|
||||
++irelease;
|
||||
}
|
||||
|
||||
// At the end of this bucket?
|
||||
if (iend == ibucket->end())
|
||||
{
|
||||
|
||||
@ -435,6 +435,10 @@ namespace
|
||||
|
||||
DataNDC::iterator idata = data.find(K5);
|
||||
CHECK(idata == data.end());
|
||||
|
||||
// Test that erase really does erase from the pool.
|
||||
CHECK(!data.full());
|
||||
CHECK(!data.empty());
|
||||
}
|
||||
|
||||
//*************************************************************************
|
||||
@ -462,6 +466,11 @@ namespace
|
||||
DataNDC::iterator idata_end = data.find(K8);
|
||||
|
||||
idata = data.erase(idata, idata_end); // Erase K5, K6, K7
|
||||
|
||||
CHECK_EQUAL(initial_data.size() - 3, data.size());
|
||||
CHECK(!data.full());
|
||||
CHECK(!data.empty());
|
||||
|
||||
CHECK(idata == data.find(K8));
|
||||
|
||||
idata = data.find(K0);
|
||||
|
||||
@ -396,6 +396,10 @@ namespace
|
||||
|
||||
CHECK(idata == data.end());
|
||||
CHECK(inext == iafter);
|
||||
|
||||
// Test that erase really does erase from the pool.
|
||||
CHECK(!data.full());
|
||||
CHECK(!data.empty());
|
||||
}
|
||||
|
||||
//*************************************************************************
|
||||
@ -407,6 +411,11 @@ namespace
|
||||
DataNDC::iterator idata_end = data.find(K8);
|
||||
|
||||
idata = data.erase(idata, idata_end); // Erase K5, K6, K7
|
||||
|
||||
CHECK_EQUAL(initial_data.size() - 3, data.size());
|
||||
CHECK(!data.full());
|
||||
CHECK(!data.empty());
|
||||
|
||||
CHECK(idata == data.find(K8));
|
||||
|
||||
idata = data.find(K0);
|
||||
|
||||
@ -321,6 +321,10 @@ namespace
|
||||
|
||||
CHECK(idata == data.end());
|
||||
CHECK(inext == iafter);
|
||||
|
||||
// Test that erase really does erase from the pool.
|
||||
CHECK(!data.full());
|
||||
CHECK(!data.empty());
|
||||
}
|
||||
|
||||
//*************************************************************************
|
||||
@ -336,6 +340,11 @@ namespace
|
||||
test.assign(data.begin(), data.end());
|
||||
|
||||
idata = data.erase(idata, idata_end); // Erase N5, N6, N7
|
||||
|
||||
CHECK_EQUAL(initial_data.size() - 3, data.size());
|
||||
CHECK(!data.full());
|
||||
CHECK(!data.empty());
|
||||
|
||||
CHECK(idata == data.find(N8));
|
||||
|
||||
test.assign(data.begin(), data.end());
|
||||
|
||||
@ -301,6 +301,10 @@ namespace
|
||||
|
||||
CHECK(idata == data.end());
|
||||
CHECK(inext == iafter);
|
||||
|
||||
// Test that erase really does erase from the pool.
|
||||
CHECK(!data.full());
|
||||
CHECK(!data.empty());
|
||||
}
|
||||
|
||||
//*************************************************************************
|
||||
@ -316,6 +320,11 @@ namespace
|
||||
test.assign(data.begin(), data.end());
|
||||
|
||||
idata = data.erase(idata, idata_end); // Erase N5, N6, N7
|
||||
|
||||
CHECK_EQUAL(initial_data.size() - 3, data.size());
|
||||
CHECK(!data.full());
|
||||
CHECK(!data.empty());
|
||||
|
||||
CHECK(idata == data.find(N8));
|
||||
|
||||
test.assign(data.begin(), data.end());
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user