0022815: Missing delete operator for placement new
[occt.git] / src / Storage / Storage_BucketOfPersistent.hxx
1 #ifndef _Storage_BucketOfPersistent_HeaderFile
2 #define _Storage_BucketOfPersistent_HeaderFile
3
4 #include <Standard_Integer.hxx>
5 #include <Standard_Persistent.hxx>
6
7 class Storage_Schema;
8 class Storage_BucketOfPersistent;
9 class Storage_BucketIterator;
10
11 class Storage_Bucket {
12   friend class Storage_BucketIterator;
13   friend class Storage_Schema;
14   friend class Storage_BucketOfPersistent;
15
16   Standard_Persistent** mySpace;
17   Standard_Integer mySpaceSize;
18   Standard_Integer myCurrentSpace;
19
20
21   void Append(Standard_Persistent *);
22  
23   Standard_Persistent* Value(const Standard_Integer theIndex) const;
24
25 public:
26   Storage_Bucket() : mySpace(0L), mySpaceSize(200000), myCurrentSpace(-1)
27     {
28       mySpace = (Standard_Persistent**)Standard::Allocate(sizeof(Standard_Persistent*) * mySpaceSize);
29     }
30
31   Storage_Bucket(const Standard_Integer theSpaceSize) :  mySpace(0L), mySpaceSize(theSpaceSize), myCurrentSpace(-1)
32     {
33       mySpace = (Standard_Persistent**)Standard::Allocate(sizeof(Standard_Persistent*) * mySpaceSize);
34     }
35
36   void Clear();
37
38   ~Storage_Bucket();
39 };
40
41
42 class Storage_BucketOfPersistent {
43   friend class Storage_BucketIterator;
44   Storage_Bucket** myBuckets;
45   Standard_Integer myNumberOfBucket;
46   Standard_Integer myNumberOfBucketAllocated;
47   Storage_Bucket*  myCurrentBucket;
48   Standard_Integer myCurrentBucketNumber;
49   Standard_Integer myLength;
50   Standard_Integer myBucketSize;
51   
52 public:
53   Storage_BucketOfPersistent(const Standard_Integer theBucketSize = 300000, const Standard_Integer theBucketNumber = 100);
54   
55   Standard_Integer Length() const
56     {
57       return myLength;
58     }
59
60   void Append(const Handle(Standard_Persistent)& sp);
61   
62   Standard_Persistent* Value(const Standard_Integer theIndex);
63
64   void Clear();
65
66   ~Storage_BucketOfPersistent() ;
67
68 };
69
70 class Storage_BucketIterator {
71   Storage_BucketOfPersistent *myBucket;
72   Storage_Bucket             *myCurrentBucket;
73   Standard_Integer            myCurrentBucketIndex;
74   Standard_Integer            myCurrentIndex;
75   Standard_Integer            myBucketNumber;
76   Standard_Boolean            myMoreObject;
77
78 public:
79   Storage_BucketIterator(Storage_BucketOfPersistent*);
80   void Init(Storage_BucketOfPersistent*);
81   void Reset();
82
83   Standard_Persistent* Value() const
84     {
85       if (myCurrentBucket) {
86         return myCurrentBucket->mySpace[myCurrentIndex];
87       }
88       else return 0L;
89     }
90
91   Standard_Boolean More() const
92     {
93       return myMoreObject;
94     }
95
96   void Next();
97 };
98
99 #endif