44 :
Node(pTree, id, 0, pTree->m_leafCapacity)
52 return NodePtr(
this, &(m_pTree->m_leafPool));
57 for (uint32_t cChild = 0; cChild < m_children; ++cChild)
61 if (m_pIdentifier[cChild] ==
id )
return NodePtr(
this, &(m_pTree->m_leafPool));
69 ++(m_pTree->m_stats.m_splits);
71 std::vector<uint32_t> g1, g2;
73 switch (m_pTree->m_treeVariant)
76 rstarSplit(dataLength, pData, mbr,
id, g1, g2);
82 pLeft = m_pTree->m_leafPool.acquire();
83 pRight = m_pTree->m_leafPool.acquire();
85 if (pLeft.
get() ==
nullptr) pLeft =
NodePtr(
new Leaf(m_pTree, -1), &(m_pTree->m_leafPool));
86 if (pRight.
get() ==
nullptr) pRight =
NodePtr(
new Leaf(m_pTree, -1), &(m_pTree->m_leafPool));
88 pLeft->m_nodeMBR = m_pTree->m_infiniteRegion;
89 pRight->m_nodeMBR = m_pTree->m_infiniteRegion;
93 for (cIndex = 0; cIndex < g1.size(); ++cIndex)
95 pLeft->insertEntry(m_pDataLength[g1[cIndex]], m_pData[g1[cIndex]], *(m_ptrMBR[g1[cIndex]]), m_pIdentifier[g1[cIndex]]);
97 m_pData[g1[cIndex]] =
nullptr;
100 for (cIndex = 0; cIndex < g2.size(); ++cIndex)
102 pRight->insertEntry(m_pDataLength[g2[cIndex]], m_pData[g2[cIndex]], *(m_ptrMBR[g2[cIndex]]), m_pIdentifier[g2[cIndex]]);
104 m_pData[g2[cIndex]] =
nullptr;
108 void Leaf::deleteData(
id_type id, std::stack<id_type>& pathBuffer)
112 for (child = 0; child < m_children; ++child)
114 if (m_pIdentifier[child] ==
id)
break;
118 m_pTree->writeNode(
this);
120 std::stack<NodePtr> toReinsert;
121 NodePtr ptrThis(
this, &(m_pTree->m_leafPool));
122 condenseTree(toReinsert, pathBuffer, ptrThis);
123 ptrThis.relinquish();
126 while (! toReinsert.empty())
128 NodePtr n = toReinsert.top(); toReinsert.pop();
129 m_pTree->deleteNode(n.
get());
131 for (uint32_t cChild = 0; cChild < n->m_children; ++cChild)
134 uint8_t* overflowTable =
new uint8_t[m_pTree->m_stats.m_treeHeight];
135 memset(overflowTable, 0, m_pTree->m_stats.m_treeHeight);
136 m_pTree->insertData_impl(n->m_pDataLength[cChild], n->m_pData[cChild], *(n->m_ptrMBR[cChild]), n->m_pIdentifier[cChild], n->m_level, overflowTable);
137 n->m_pData[cChild] =
nullptr;
138 delete[] overflowTable;
Tools::PoolPointer< Node > NodePtr