48 return NodePtr(
this, &(m_pTree->m_leafPool));
53 for (uint32_t cChild = 0; cChild < m_children; ++cChild)
57 if (m_pIdentifier[cChild] ==
id &&
static_cast<Region>(mbr) ==
static_cast<Region>(*(m_ptrMBR[cChild])))
58 return NodePtr(
this, &(m_pTree->m_leafPool));
68 ++(m_pTree->m_stats.m_u64Splits);
70 std::vector<uint32_t> g1, g2;
72 switch (m_pTree->m_treeVariant)
76 rtreeSplit(dataLength, pData, mbr,
id, g1, g2, mbr2, id2, bInsertMbr2);
79 rstarSplit(dataLength, pData, mbr,
id, g1, g2, mbr2, id2, bInsertMbr2);
85 pLeft = m_pTree->m_leafPool.acquire();
86 pRight = m_pTree->m_leafPool.acquire();
88 if (pLeft.
get() ==
nullptr) pLeft =
NodePtr(
new Leaf(m_pTree, -1), &(m_pTree->m_leafPool));
89 if (pRight.
get() ==
nullptr) pRight =
NodePtr(
new Leaf(m_pTree, -1), &(m_pTree->m_leafPool));
91 pLeft->m_nodeMBR = m_pTree->m_infiniteRegion;
92 pRight->m_nodeMBR = m_pTree->m_infiniteRegion;
96 for (cIndex = 0; cIndex < g1.size(); ++cIndex)
98 pLeft->insertEntry(m_pDataLength[g1[cIndex]], m_pData[g1[cIndex]], *(m_ptrMBR[g1[cIndex]]), m_pIdentifier[g1[cIndex]]);
100 m_pData[g1[cIndex]] =
nullptr;
103 for (cIndex = 0; cIndex < g2.size(); ++cIndex)
105 pRight->insertEntry(m_pDataLength[g2[cIndex]], m_pData[g2[cIndex]], *(m_ptrMBR[g2[cIndex]]), m_pIdentifier[g2[cIndex]]);
107 m_pData[g2[cIndex]] =
nullptr;
Tools::PoolPointer< Node > NodePtr