30 #pragma GCC diagnostic push
31 #pragma GCC diagnostic ignored "-Wcast-qual"
73 void getChildData(uint32_t index, uint32_t& length, uint8_t** data)
const override;
76 bool isLeaf()
const override;
82 virtual Node& operator=(
const Node&);
84 virtual void insertEntry(uint32_t dataLength, uint8_t* pData,
Region& mbr,
id_type id);
85 virtual void deleteEntry(uint32_t index);
87 virtual bool insertData(uint32_t dataLength, uint8_t* pData,
Region& mbr,
id_type id, std::stack<id_type>& pathBuffer, uint8_t* overflowTable);
88 virtual void reinsertData(uint32_t dataLength, uint8_t* pData,
Region& mbr,
id_type id, std::vector<uint32_t>& reinsert, std::vector<uint32_t>& keep);
90 virtual void rtreeSplit(uint32_t dataLength, uint8_t* pData,
Region& mbr,
id_type id, std::vector<uint32_t>& group1, std::vector<uint32_t>& group2);
91 virtual void rstarSplit(uint32_t dataLength, uint8_t* pData,
Region& mbr,
id_type id, std::vector<uint32_t>& group1, std::vector<uint32_t>& group2);
93 virtual void pickSeeds(uint32_t& index1, uint32_t& index2);
95 virtual void condenseTree(std::stack<NodePtr>& toReinsert, std::stack<id_type>& pathBuffer,
NodePtr& ptrThis);
97 virtual NodePtr chooseSubtree(
const Region& mbr, uint32_t level, std::stack<id_type>& pathBuffer) = 0;
102 RTree* m_pTree{
nullptr};
112 uint32_t m_children{0};
115 uint32_t m_capacity{0};
121 uint8_t** m_pData{
nullptr};
127 id_type* m_pIdentifier{
nullptr};
130 uint32_t* m_pDataLength{
nullptr};
132 uint32_t m_totalDataLength{0};
134 class RstarSplitEntry
141 RstarSplitEntry(
Region* pr, uint32_t index, uint32_t dimension) :
142 m_pRegion(pr), m_index(index), m_sortDim(dimension) {}
144 static int compareLow(
const void* pv1,
const void* pv2)
146 RstarSplitEntry* pe1 = * (RstarSplitEntry**) pv1;
147 RstarSplitEntry* pe2 = * (RstarSplitEntry**) pv2;
149 assert(pe1->m_sortDim == pe2->m_sortDim);
151 if (pe1->m_pRegion->m_pLow[pe1->m_sortDim] < pe2->m_pRegion->m_pLow[pe2->m_sortDim])
return -1;
152 if (pe1->m_pRegion->m_pLow[pe1->m_sortDim] > pe2->m_pRegion->m_pLow[pe2->m_sortDim])
return 1;
156 static int compareHigh(
const void* pv1,
const void* pv2)
158 RstarSplitEntry* pe1 = * (RstarSplitEntry**) pv1;
159 RstarSplitEntry* pe2 = * (RstarSplitEntry**) pv2;
161 assert(pe1->m_sortDim == pe2->m_sortDim);
163 if (pe1->m_pRegion->m_pHigh[pe1->m_sortDim] < pe2->m_pRegion->m_pHigh[pe2->m_sortDim])
return -1;
164 if (pe1->m_pRegion->m_pHigh[pe1->m_sortDim] > pe2->m_pRegion->m_pHigh[pe2->m_sortDim])
return 1;
175 ReinsertEntry(uint32_t index,
double dist) : m_index(index), m_dist(dist) {}
177 static int compareReinsertEntry(
const void* pv1,
const void* pv2)
179 ReinsertEntry* pe1 = * (ReinsertEntry**) pv1;
180 ReinsertEntry* pe2 = * (ReinsertEntry**) pv2;
182 if (pe1->m_dist < pe2->m_dist)
return -1;
183 if (pe1->m_dist > pe2->m_dist)
return 1;
198 #pragma GCC diagnostic pop
uint32_t getLevel() const override
void getChildShape(uint32_t index, IShape **out) const override
void loadFromByteArray(const uint8_t *data) override
void storeToByteArray(uint8_t **data, uint32_t &len) override
void getChildData(uint32_t index, uint32_t &length, uint8_t **data) const override
bool isIndex() const override
Tools::IObject * clone() override
uint32_t getChildrenCount() const override
uint32_t getByteArraySize() override
void getShape(IShape **out) const override
id_type getChildIdentifier(uint32_t index) const override
bool isLeaf() const override
id_type getIdentifier() const override
Tools::PoolPointer< Node > NodePtr