Fix inconsistent Node::size when removing a key with unassigned node and key is a node (#327)
This commit is contained in:
parent
d08f68ff02
commit
4329bb7c02
@ -235,6 +235,14 @@ bool node_data::remove(node& key, shared_memory_holder /* pMemory */) {
|
|||||||
if (m_type != NodeType::Map)
|
if (m_type != NodeType::Map)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
kv_pairs::iterator it = m_undefinedPairs.begin();
|
||||||
|
while (it != m_undefinedPairs.end()) {
|
||||||
|
kv_pairs::iterator jt = std::next(it);
|
||||||
|
if (it->first->is(key))
|
||||||
|
m_undefinedPairs.erase(it);
|
||||||
|
it = jt;
|
||||||
|
}
|
||||||
|
|
||||||
for (node_map::iterator it = m_map.begin(); it != m_map.end(); ++it) {
|
for (node_map::iterator it = m_map.begin(); it != m_map.end(); ++it) {
|
||||||
if (it->first->is(key)) {
|
if (it->first->is(key)) {
|
||||||
m_map.erase(it);
|
m_map.erase(it);
|
||||||
|
|||||||
@ -106,6 +106,14 @@ TEST(NodeTest, RemoveUnassignedNode) {
|
|||||||
EXPECT_EQ(0, node.size());
|
EXPECT_EQ(0, node.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(NodeTest, RemoveUnassignedNodeFromMap) {
|
||||||
|
Node node(NodeType::Map);
|
||||||
|
Node n;
|
||||||
|
node[n];
|
||||||
|
node.remove(n);
|
||||||
|
EXPECT_EQ(0, node.size());
|
||||||
|
}
|
||||||
|
|
||||||
TEST(NodeTest, MapForceInsert) {
|
TEST(NodeTest, MapForceInsert) {
|
||||||
Node node;
|
Node node;
|
||||||
Node k1("k1");
|
Node k1("k1");
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user