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