1 //--------------------------------------------------------------------------- 2 #include "stdafx.h" 3 4 #include "resources.h" 5 #include "utils.h" 6 7 #include <cstring> 8 9 //--------------------------------------------------------------------------- 10 #ifndef NULL 11 #define NULL 0 12 #endif 13 14 using namespace Gigalomania; 15 16 vector<TrackedObject *> TrackedObject::tags; 17 TrackedObject()18TrackedObject::TrackedObject() { 19 this->tag = TrackedObject::addTag(this); 20 //LOG("New Tracked Object, tag = %d\n", this->tag); 21 this->deleteLevel = 0; 22 } 23 ~TrackedObject()24TrackedObject::~TrackedObject() { 25 //LOG("Deleting Tracked Object, tag = %d\n", this->tag); 26 removeTag(this->tag); 27 } 28 initialise()29void TrackedObject::initialise() { 30 // important for Android, where static/globals aren't cleared when native app is restarted 31 tags.clear(); 32 } 33 flushAll()34void TrackedObject::flushAll() { 35 LOG("TrackedObject::flushAll()\n"); 36 for(size_t i=0;i<tags.size();i++) { 37 TrackedObject *vo = tags.at(i); 38 if(vo != NULL) { 39 delete vo; 40 tags[i] = NULL; 41 } 42 } 43 tags.clear(); 44 } 45 flush(int deleteLevel)46void TrackedObject::flush(int deleteLevel) { 47 LOG("TrackedObject::flush(%d)\n", deleteLevel); 48 for(size_t i=0;i<tags.size();i++) { 49 TrackedObject *vo = tags.at(i); 50 if(vo != NULL && vo->deleteLevel >= deleteLevel) { 51 delete vo; 52 tags[i] = NULL; 53 } 54 } 55 } 56 cleanup()57void TrackedObject::cleanup() { 58 LOG("TrackedObject::cleanup()\n"); 59 flushAll(); 60 61 /*if(error != NULL) 62 delete error;*/ 63 64 /*#ifdef _DEBUG 65 dumpAllocs(); 66 #endif*/ 67 } 68 addTag(TrackedObject * ptr)69size_t TrackedObject::addTag(TrackedObject *ptr) { 70 size_t tag = tags.size() + 1; 71 tags.push_back(ptr); 72 return tag; 73 } 74 ptrFromTag(size_t tag)75TrackedObject *TrackedObject::ptrFromTag(size_t tag) { 76 TrackedObject *ptr = NULL; 77 if( tag == 0 ||tag > tags.size() ) { 78 // error 79 ptr = NULL; 80 } 81 else { 82 ptr = tags.at(tag-1); 83 } 84 return ptr; 85 } 86 removeTag(size_t tag)87void TrackedObject::removeTag(size_t tag) { 88 //tags.getData()[tag - 1] = NULL; 89 tags[tag-1] = NULL; 90 } 91 getNumTags()92size_t TrackedObject::getNumTags() { 93 return tags.size(); 94 } 95 getTag(size_t index)96TrackedObject *TrackedObject::getTag(size_t index) { 97 //return (TrackedObject *)tags.elementAt(index); 98 return tags.at(index); 99 } 100 101 /*VisionException *Vision::getError() { 102 return error; 103 } 104 105 void Vision::setError(VisionException *ve) { 106 if(error != NULL) 107 delete error; 108 throw ve; 109 error = ve; 110 }*/ 111 isClass(const char * classname) const112bool TrackedObject::isClass(const char *classname) const { 113 return ( strcmp( this->getClass(), classname ) == 0 ); 114 } 115 116