summaryrefslogtreecommitdiffstats
path: root/relmddif/dbmddset.hh
blob: 7df6cd40817b85ab977f241ce9b91d2da4bff3e8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
/*
* 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 _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<DBMDDObjId, std::less<DBMDDObjId> > 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