30 #pragma GCC diagnostic push
31 #pragma GCC diagnostic ignored "-Wcast-qual"
52 IObject*
clone()
override;
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,
TimeRegion& mbr,
id_type id);
85 virtual bool deleteEntry(uint32_t index);
87 virtual bool insertData(
88 uint32_t dataLength, uint8_t* pData,
TimeRegion& mbr,
id_type id, std::stack<id_type>& pathBuffer,
89 TimeRegion& mbr2,
id_type id2,
bool bInsertMbr2 =
false,
bool forceAdjust =
false);
91 virtual bool deleteData(
id_type id,
double delTime, std::stack<id_type>& pathBuffer,
bool adjustMBR =
false);
93 virtual void rtreeSplit(
94 uint32_t dataLength, uint8_t* pData,
TimeRegion& mbr,
id_type id, std::vector<uint32_t>& group1, std::vector<uint32_t>& group2,
96 virtual void rstarSplit(
97 uint32_t dataLength, uint8_t* pData,
TimeRegion& mbr,
id_type id, std::vector<uint32_t>& group1, std::vector<uint32_t>& group2,
100 virtual void pickSeeds(uint32_t& index1, uint32_t& index2, uint32_t total);
102 virtual NodePtr chooseSubtree(
const TimeRegion& mbr, uint32_t level, std::stack<id_type>& pathBuffer) = 0;
120 uint32_t m_children{0};
123 uint32_t m_capacity{0};
129 uint8_t** m_pData{
nullptr};
135 id_type* m_pIdentifier{
nullptr};
138 uint32_t* m_pDataLength{
nullptr};
140 uint32_t m_totalDataLength{0};
142 class RstarSplitEntry
145 RstarSplitEntry(
TimeRegion* pr, uint32_t index, uint32_t dimension) :
146 m_pRegion(pr), m_index(index), m_sortDim(dimension) {}
148 static int compareLow(
const void* pv1,
const void* pv2)
150 RstarSplitEntry* pe1 = * (RstarSplitEntry**) pv1;
151 RstarSplitEntry* pe2 = * (RstarSplitEntry**) pv2;
153 if (pe1->m_pRegion->m_pLow[pe1->m_sortDim] < pe2->m_pRegion->m_pLow[pe2->m_sortDim])
return -1;
154 if (pe1->m_pRegion->m_pLow[pe1->m_sortDim] > pe2->m_pRegion->m_pLow[pe2->m_sortDim])
return 1;
158 static int compareHigh(
const void* pv1,
const void* pv2)
160 RstarSplitEntry* pe1 = * (RstarSplitEntry**) pv1;
161 RstarSplitEntry* pe2 = * (RstarSplitEntry**) pv2;
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;
173 class DeleteDataEntry
176 DeleteDataEntry(uint32_t index,
double d) : m_index(index), m_increase(d) {}
178 static bool compare(DeleteDataEntry e1, DeleteDataEntry e2) {
return e1.m_increase < e2.m_increase; }
193 #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
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