29 #pragma GCC diagnostic push 30 #pragma GCC diagnostic ignored "-Wcast-qual" 72 void getChildData(uint32_t index, uint32_t& length, uint8_t** data)
const override;
75 bool isLeaf()
const override;
81 virtual Node& operator=(
const Node&);
83 virtual bool insertEntry(uint32_t dataLength, uint8_t* pData,
MovingRegion& mbr,
id_type id);
84 virtual void deleteEntry(uint32_t index);
86 virtual bool insertData(uint32_t dataLength, uint8_t* pData,
MovingRegion& mbr,
id_type id, std::stack<id_type>& pathBuffer, uint8_t* overflowTable);
87 virtual void reinsertData(uint32_t dataLength, uint8_t* pData,
MovingRegion& mbr,
id_type id, std::vector<uint32_t>& reinsert, std::vector<uint32_t>& keep);
89 virtual void rstarSplit(uint32_t dataLength, uint8_t* pData,
MovingRegion& mbr,
id_type id, std::vector<uint32_t>& group1, std::vector<uint32_t>& group2);
91 virtual void condenseTree(std::stack<NodePtr>& toReinsert, std::stack<id_type>& pathBuffer, NodePtr& ptrThis);
93 virtual NodePtr chooseSubtree(
const MovingRegion& mbr, uint32_t level, std::stack<id_type>& pathBuffer) = 0;
94 virtual NodePtr findLeaf(
const MovingRegion& mbr,
id_type id, std::stack<id_type>& pathBuffer) = 0;
96 virtual void split(uint32_t dataLength, uint8_t* pData,
MovingRegion& mbr,
id_type id, NodePtr& left, NodePtr& right) = 0;
108 uint32_t m_children{0};
111 uint32_t m_capacity{0};
117 uint8_t** m_pData{
nullptr};
123 id_type* m_pIdentifier{
nullptr};
126 uint32_t* m_pDataLength{
nullptr};
128 uint32_t m_totalDataLength{0};
130 class RstarSplitEntry
137 RstarSplitEntry(
MovingRegion* pr, uint32_t index, uint32_t dimension)
138 : m_pRegion(pr), m_index(index), m_sortDim(dimension) {}
140 static int compareLow(
const void* pv1,
const void* pv2)
142 RstarSplitEntry* pe1 = * (RstarSplitEntry**) pv1;
143 RstarSplitEntry* pe2 = * (RstarSplitEntry**) pv2;
145 if (pe1->m_pRegion->m_pLow[pe1->m_sortDim] < pe2->m_pRegion->m_pLow[pe1->m_sortDim])
return -1;
146 if (pe1->m_pRegion->m_pLow[pe1->m_sortDim] > pe2->m_pRegion->m_pLow[pe1->m_sortDim])
return 1;
150 static int compareHigh(
const void* pv1,
const void* pv2)
152 RstarSplitEntry* pe1 = * (RstarSplitEntry**) pv1;
153 RstarSplitEntry* pe2 = * (RstarSplitEntry**) pv2;
155 if (pe1->m_pRegion->m_pHigh[pe1->m_sortDim] < pe2->m_pRegion->m_pHigh[pe1->m_sortDim])
return -1;
156 if (pe1->m_pRegion->m_pHigh[pe1->m_sortDim] > pe2->m_pRegion->m_pHigh[pe1->m_sortDim])
return 1;
160 static int compareVLow(
const void* pv1,
const void* pv2)
162 RstarSplitEntry* pe1 = * (RstarSplitEntry**) pv1;
163 RstarSplitEntry* pe2 = * (RstarSplitEntry**) pv2;
165 if (pe1->m_pRegion->m_pVLow[pe1->m_sortDim] < pe2->m_pRegion->m_pVLow[pe1->m_sortDim])
return -1;
166 if (pe1->m_pRegion->m_pVLow[pe1->m_sortDim] > pe2->m_pRegion->m_pVLow[pe1->m_sortDim])
return 1;
170 static int compareVHigh(
const void* pv1,
const void* pv2)
172 RstarSplitEntry* pe1 = * (RstarSplitEntry**) pv1;
173 RstarSplitEntry* pe2 = * (RstarSplitEntry**) pv2;
175 if (pe1->m_pRegion->m_pVHigh[pe1->m_sortDim] < pe2->m_pRegion->m_pVHigh[pe1->m_sortDim])
return -1;
176 if (pe1->m_pRegion->m_pVHigh[pe1->m_sortDim] > pe2->m_pRegion->m_pVHigh[pe1->m_sortDim])
return 1;
187 ReinsertEntry(uint32_t index,
double dist) : m_index(index), m_dist(dist) {}
189 static int compareReinsertEntry(
const void* pv1,
const void* pv2)
191 ReinsertEntry* pe1 = * (ReinsertEntry**) pv1;
192 ReinsertEntry* pe2 = * (ReinsertEntry**) pv2;
194 if (pe1->m_dist < pe2->m_dist)
return -1;
195 if (pe1->m_dist > pe2->m_dist)
return 1;
209 #pragma GCC diagnostic pop bool isLeaf() const override
id_type getChildIdentifier(uint32_t index) const override
void storeToByteArray(uint8_t **data, uint32_t &len) override
void loadFromByteArray(const uint8_t *data) override
void getChildShape(uint32_t index, IShape **out) const override
Tools::PoolPointer< Node > NodePtr
bool isIndex() const override
uint32_t getLevel() const override
Tools::IObject * clone() override
void getChildData(uint32_t index, uint32_t &length, uint8_t **data) const override
id_type getIdentifier() const override
uint32_t getByteArraySize() override
uint32_t getChildrenCount() const override
void getShape(IShape **out) const override