/* class representing nodes in a R Tree */ #ifndef RTREENODE_H #define RTREENODE_H #include "Attribute.h" #include #include #include "Algebras/Rectangle/RectangleAlgebra.h" #include "WinUnix.h" namespace fialgebra{ template class RTreeNode; template class RTreeNode{ public: RTreeNode(size_t pageSize, size_t id, bool isLeaf); RTreeNode(char* bytes, size_t pageSize, size_t id); ~RTreeNode(); //Copy constructor (for pair<>) RTreeNode(const RTreeNode& o); void AddEntry(const Rectangle& value, size_t id); void RemoveEntryAtEnd(); void RemoveEntryAt(size_t index); void ClearEntries(); const Rectangle& GetValueAt(size_t index) const; void SetValueAt(size_t index, const Rectangle& value); size_t GetIDAt(size_t index) const; void SetIDAt(size_t index, size_t id); size_t GetNumberOfEntries() const; size_t GetMax(); static size_t GetMax(size_t pageSize); bool IsLeaf(); char* GetBytes(); Rectangle* getRectangle(); size_t GetNodeID() const; void SetNodeID(size_t id); const unsigned long GetParentNodeID() const; void SetParentNodeID(unsigned long id); void Print(std::ostream& o); //Assignment operator overload RTreeNode& operator=(const RTreeNode& o); // overloaded < Operator bool operator < (const RTreeNode& o); // overloaded == Operator bool operator == (const RTreeNode& o); const Rectangle& GetBox(); void PrintNodeToString(); private: struct Overflow{ Rectangle rectangle; size_t id; Overflow(const Rectangle& rectangle, const size_t id); }; static size_t constantSize, typeSize; Rectangle* m_box; char* m_bytes, * m_values; size_t* m_ids; bool* m_isLeaf; size_t* m_numberOfEntries; std::vector m_overflow; unsigned long nodeID, parentNodeID; size_t m_pageSize; size_t m_max; }; } #endif