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()18 TrackedObject::TrackedObject() {
19 	this->tag = TrackedObject::addTag(this);
20 	//LOG("New Tracked Object, tag = %d\n", this->tag);
21 	this->deleteLevel = 0;
22 }
23 
~TrackedObject()24 TrackedObject::~TrackedObject() {
25 	//LOG("Deleting Tracked Object, tag = %d\n", this->tag);
26 	removeTag(this->tag);
27 }
28 
initialise()29 void TrackedObject::initialise() {
30 	// important for Android, where static/globals aren't cleared when native app is restarted
31 	tags.clear();
32 }
33 
flushAll()34 void 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)46 void 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()57 void 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)69 size_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)75 TrackedObject *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)87 void TrackedObject::removeTag(size_t tag) {
88 	//tags.getData()[tag - 1] = NULL;
89 	tags[tag-1] = NULL;
90 }
91 
getNumTags()92 size_t TrackedObject::getNumTags() {
93 	return tags.size();
94 }
95 
getTag(size_t index)96 TrackedObject *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) const112 bool TrackedObject::isClass(const char *classname) const {
113 	return ( strcmp( this->getClass(), classname ) == 0 );
114 }
115 
116