1 #pragma once
2 
3 /** A general class that other classes can subclass, to allow things like
4 *   easier memory management.
5 */
6 
7 using std::vector;
8 
9 namespace Gigalomania {
10 	class TrackedObject {
11 		static vector<TrackedObject *> tags;
12 		size_t tag;
13 		int deleteLevel;
14 
15 	public:
16 		TrackedObject();
17 		virtual ~TrackedObject();
18 
19 		static void initialise();
20 		static void flushAll();
21 		static void flush(int deleteLevel);
22 		static void cleanup();
23 		static size_t addTag(TrackedObject *ptr);
24 		static void removeTag(size_t tag);
25 		static size_t getNumTags();
26 		static TrackedObject *getTag(size_t index);
27 		static TrackedObject *ptrFromTag(size_t tag);
28 		virtual const char *getClass() const=0;
29 		bool isClass(const char *classname) const;
30 	};
31 }
32