gecko-dev/ef/Runtime/ClassInfo/Collector.h
1999-11-02 06:38:29 +00:00

88 lines
2.4 KiB
C++

/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public
* License Version 1.1 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.mozilla.org/NPL/
*
* Software distributed under the License is distributed on an "AS
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
* implied. See the License for the specific language governing
* rights and limitations under the License.
*
* The Original Code is mozilla.org code.
*
* The Initial Developer of the Original Code is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All
* Rights Reserved.
*
* Contributor(s):
*/
#ifndef _COLLECTOR_H_
#define _COLLECTOR_H_
#include "Pool.h"
/* A class that holds a collection of objects of class N of a fixed size that
* may not all be added to the collection at the same time. Keeps track of
* how many objects have been actually added, and whether or not the
* collection is full (ie all objects have been added).
*/
template<class N> class Collector {
private:
N **entries;
Uint32 numEntries;
bool allEntriesBuilt;
Uint32 numEntriesBuilt;
Pool &pool;
public:
Collector(Pool &p) :
entries(0), numEntries(0), allEntriesBuilt(false), numEntriesBuilt(0),
pool(p) { }
/* Set the size of the collection. You can only do this once */
void setSize(Uint32 n) {
assert(!numEntries);
numEntries = n;
entries = new (pool) N *[n];
for (Uint32 i = 0; i < n; i++)
entries[i] = 0;
}
/* Add an entry to the collection at index n. You can only do this once. */
void set(Uint32 n, N *entry) {
assert(n < numEntries && !entries[n] && entry);
entries[n] = entry;
if (++numEntriesBuilt == numEntries)
allEntriesBuilt = true;
}
/* Get the entry at index n, NIL if none has been set yet. */
N *get(Uint32 n) {
assert(n < numEntries);
return entries[n];
}
/* return true if all entries have been built */
bool built() { return allEntriesBuilt; }
/* Return number of entries built */
Int32 getNumEntriesBuilt() { return numEntriesBuilt; }
/* return all entries */
N **getEntries() { return entries; }
/* return number of entries */
Uint32 getSize() { return numEntries; }
};
#endif /* _COLLECTOR_H_ */