summaryrefslogtreecommitdiffstats
path: root/relindexif/hierindex.hh
diff options
context:
space:
mode:
Diffstat (limited to 'relindexif/hierindex.hh')
-rw-r--r--relindexif/hierindex.hh219
1 files changed, 219 insertions, 0 deletions
diff --git a/relindexif/hierindex.hh b/relindexif/hierindex.hh
new file mode 100644
index 0000000..89b2043
--- /dev/null
+++ b/relindexif/hierindex.hh
@@ -0,0 +1,219 @@
+/*
+* This file is part of rasdaman community.
+*
+* Rasdaman community is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 3 of the License, or
+* (at your option) any later version.
+*
+* Rasdaman community is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with rasdaman community. If not, see <http://www.gnu.org/licenses/>.
+*
+* Copyright 2003, 2004, 2005, 2006, 2007, 2008, 2009 Peter Baumann /
+rasdaman GmbH.
+*
+* For more information please see <http://www.rasdaman.org>
+* or contact Peter Baumann via <baumann@rasdaman.com>.
+*/
+#ifndef _DBHIERINDEX_HH_
+#define _DBHIERINDEX_HH_
+
+#include "reladminif/dbobject.hh"
+#include "indexmgr/hierindexds.hh"
+#include "relcatalogif/inlineminterval.hh"
+
+//@ManMemo: Module: {\bf relindexif}
+/*@Doc:
+This class stores data of hierarchical indexes in the database.
+
+There should be another interface to include the isLeaf/isRoot/...
+functionality.
+
+Beware of the cache when droping the IndexDS classes!
+
+See indexmgr/hierindexds.hh and indexmgr/indexds.hh for documentation.
+*/
+class DBHierIndex : public HierIndexDS
+ {
+ public:
+ DBHierIndex(r_Dimension dim, bool isNode, bool makePersistent);
+ /*@Doc:
+ constructs a new index with type ixType, dimension dim.
+ if isNode is true the index behaves as a node, else as
+ a leaf instance is imediately persistent
+ */
+
+ virtual double getOccupancy() const;
+
+ HierIndexDS* getParent() const;
+
+ void setParent(const HierIndexDS* newPa);
+
+ virtual void setIsNode(bool beNode);
+
+ virtual bool isLeaf() const;
+
+ virtual bool isRoot() const;
+ /*@Doc:
+ is a check for a valid myParent OId
+ */
+
+ virtual unsigned int getHeight() const;
+
+ virtual unsigned int getHeightOfTree() const;
+ /*@Doc:
+ Recursive function to get height of the tree.
+ */
+
+ virtual unsigned int getHeightToRoot() const;
+ /*@Doc:
+ Recursive function to get the number of levels to the root.
+ */
+
+ virtual unsigned int getHeightToLeaf() const;
+ /*@Doc:
+ Recursive function to get the number of levels to the
+ leafs.
+ */
+
+ virtual unsigned int getTotalEntryCount() const;
+
+ virtual unsigned int getTotalNodeCount() const;
+
+ virtual unsigned int getTotalLeafCount() const;
+
+ virtual r_Minterval getCoveredDomain() const;
+
+ virtual r_Minterval getAssignedDomain() const;
+
+ virtual r_Minterval getObjectDomain(unsigned int pos) const;
+
+ virtual r_Dimension getDimension() const;
+
+ virtual void setAssignedDomain(const r_Minterval& domain);
+
+ virtual unsigned int getSize() const;
+
+ virtual r_Bytes getTotalStorageSize() const;
+
+ virtual bool isValid() const;
+
+ virtual bool isUnderFull() const;
+
+ virtual bool isOverFull() const;
+
+ virtual bool isSameAs(const IndexDS* pix) const;
+
+ virtual bool removeObject(unsigned int pos);
+
+ virtual bool removeObject(const KeyObject& theKey);
+
+ virtual void insertObject(const KeyObject& theKey, unsigned int pos);
+
+ virtual void setObject(const KeyObject& theKey, unsigned int pos);
+
+ virtual void setObjectDomain(const r_Minterval& dom, unsigned int pos);
+
+ virtual const KeyObject& getObject(unsigned int pos) const;
+
+ virtual void getObjects(KeyObjectVector& objs) const;
+
+ virtual unsigned int getOptimalSize() const;
+
+ static unsigned int getOptimalSize(r_Dimension dim);
+ /*@Doc:
+ Used to calculate the optimal number of entries for
+ that dimension
+ */
+
+ virtual void freeDS();
+
+ virtual OId::OIdPrimitive getIdentifier() const;
+
+ static r_Bytes BytesPerTupel;
+ /*@Doc:
+ tuning parameter. used to calculate the optimal size of
+ an index. this is also the number of bytes written to the
+ database.
+ */
+
+ virtual void printStatus(unsigned int level = 0, std::ostream& stream = std::cout) const;
+
+ virtual ~DBHierIndex();
+
+ virtual void destroy();
+
+ virtual IndexDS* getNewInstance() const;
+
+ virtual BinaryRepresentation getBinaryRepresentation() const throw (r_Error);
+
+ virtual void setBinaryRepresentation(const BinaryRepresentation&) throw (r_Error);
+
+ protected:
+ friend class ObjectBroker;
+ /*@Doc:
+ ObjectBroker needs to access OId constructor
+ */
+
+ DBHierIndex(const OId& id);
+ /*@Doc:
+ */
+
+ virtual void readFromDb() throw (r_Error);
+ /*@Doc:
+ */
+
+ virtual void updateInDb() throw (r_Error);
+ /*@Doc:
+ */
+
+ virtual void deleteFromDb() throw (r_Error);
+ /*@Doc:
+ */
+
+ virtual void insertInDb() throw (r_Error);
+ /*@Doc:
+ */
+
+ void extendCoveredDomain(const r_Minterval& newTilesExtents) throw (r_Edim_mismatch, r_Eno_interval);
+ /*@Doc:
+ Recalculates the current domain of this index to
+ include newTilesExtents.
+ */
+
+ OId parent;
+ /*@Doc:
+ persistent, identifies the parent
+ */
+
+ bool _isNode;
+ /*@Doc:
+ persistent, tells the object what it is.
+ */
+
+
+ unsigned int maxSize;
+ /*@Doc:
+ Non persistent attribute. a cache so the maxSize does not have to be calculated all the time.
+ */
+
+ KeyObjectVector myKeyObjects;
+
+ InlineMinterval myDomain;
+ /*@Doc:
+ Defined domain of this index.
+ */
+
+ short currentDbRows;
+ /*@Doc:
+ is needed to support update of index in database
+ keeps the number of rows currently taken up in the db by
+ this instance
+ */
+ };
+#endif