/* * 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 . * * Copyright 2003, 2004, 2005, 2006, 2007, 2008, 2009 Peter Baumann / rasdaman GmbH. * * For more information please see * or contact Peter Baumann via . */ #ifndef _MDDSET_HH_ #define _MDDSET_HH_ class MDDSet; class OId; class EOId; class r_Error; class DBMDDObj; class CollectionType; #include "reladminif/lists.h" #include "mddid.hh" #include "reladminif/dbnamedobject.hh" #include "reladminif/dbref.hh" //@ManMemo: Module: {\bf mddif} /*@Doc: MDDSet is the persistent class for collections of MDD objects. Each instance of MDDSet represents a collection stored in the base DBMS. This class should only be used by DBMDDColl. */ class DBMDDSet : public DBNamedObject { public: DBMDDSet(const char* name, const CollectionType* type) throw (r_Error); /*@Doc: creates a new set */ DBMDDSet(const char* name, const OId& id, const CollectionType* type) throw (r_Error); /*@Doc: creates a new set */ static DBMDDSetId getDBMDDSet(const char* name) throw (r_Error); static DBMDDSetId getDBMDDSet(const OId& id) throw (r_Error); static bool deleteDBMDDSet(const OId& id); /*@Doc: returns succes */ static bool deleteDBMDDSet(const char* name); /*@Doc: returns succes */ virtual void printStatus(unsigned int level = 0, std::ostream& stream = std::cout) const; virtual void setPersistent(bool state) throw (r_Error); /*@Doc: throws r_Error when the mdd set may not be made persistent. */ void insert(DBMDDObjId newObj); /*@Doc: Inserts an object into the MDD Collection. The persistent reference count of this DBMDDObj is updated. */ DBMDDObjIdIter* newIterator() const; /*@Doc: Returns a new iterator for this collection. */ unsigned int getCardinality() const; /*@Doc: Returns the number of elements in the collection. */ void remove(DBMDDObjId& obj); /*@Doc: Removes an object from the MDD Collection. The persistent reference count of this DBMDDObj is updated. */ void removeAll(); /*@Doc: Removes all objects from the MDD Collection. The persistent reference count of the DBMDDObjs is updated. */ void releaseAll(); /*@Doc: Releases all dynamic memory used by this collection. */ bool contains_element(const DBMDDObjId& elem) const; /*@Doc: */ virtual ~DBMDDSet( ); /*@Doc: */ void deleteName(); /*@Doc: sets the name of this object to a null string. used by DatabaseIf::destroyRoot */ virtual r_Bytes getMemorySize() const; /*@Doc: */ const CollectionType* getCollType() const; /*@Doc: Returns the collectiontype of this entry. */ protected: friend class ObjectBroker; typedef std::set > DBMDDObjIdSet; DBMDDSet(const OId& id) throw (r_Error); /*@Doc: gets an existing coll from the db */ virtual void updateInDb() throw(r_Error); /*@Doc: */ virtual void insertInDb() throw(r_Error); /*@Doc: */ virtual void readFromDb() throw(r_Error); /*@Doc: */ virtual void deleteFromDb() throw(r_Error); /*@Doc: */ private: DBMDDObjIdSet mySet; /*@Doc: Memory representation of the list of oids of DBMDDObjs. */ const CollectionType* collType; /*@Doc: Pointer to the collectiontype. */ }; #endif