comparison engine/core/util/resource/pool.cpp @ 149:823544621b5b

Removed the pool listener interface as purpose was unclear and it was unused and not exposed either. Minor cleanups and documentation.
author phoku@33b003aa-7bff-0310-803a-e67f0ece8222
date Sat, 11 Oct 2008 06:23:45 +0000
parents 72c25cc27d8b
children 679ed3e15513
comparison
equal deleted inserted replaced
148:72c25cc27d8b 149:823544621b5b
36 static Logger _log(LM_POOL); 36 static Logger _log(LM_POOL);
37 37
38 Pool::Pool(const std::string& name): 38 Pool::Pool(const std::string& name):
39 m_entries(), 39 m_entries(),
40 m_location_to_entry(), 40 m_location_to_entry(),
41 m_listeners(),
42 m_loaders(), 41 m_loaders(),
43 m_curind(0),
44 m_name(name) 42 m_name(name)
45 { 43 {
46 } 44 }
47 45
48 Pool::~Pool() { 46 Pool::~Pool() {
55 delete (*loader); 53 delete (*loader);
56 } 54 }
57 } 55 }
58 56
59 void Pool::reset() { 57 void Pool::reset() {
60 std::vector<IPoolListener*>::iterator listener;
61 for (listener = m_listeners.begin(); listener != m_listeners.end(); listener++) {
62 (*listener)->poolCleared();
63 }
64 std::vector<PoolEntry*>::iterator entry; 58 std::vector<PoolEntry*>::iterator entry;
65 for (entry = m_entries.begin(); entry != m_entries.end(); entry++) { 59 for (entry = m_entries.begin(); entry != m_entries.end(); entry++) {
66 // Warn about leaks, but at least display ALL of them 60 // Warn about leaks, but at least display ALL of them
67 // Instead of bailing out with an exception in the FifeClass destructor. 61 // Instead of bailing out with an exception in the FifeClass destructor.
68 if( (*entry)->resource && (*entry)->resource->getRefCount() > 0 ) { 62 if( (*entry)->resource && (*entry)->resource->getRefCount() > 0 ) {
74 m_entries.clear(); 68 m_entries.clear();
75 m_location_to_entry.clear(); 69 m_location_to_entry.clear();
76 } 70 }
77 71
78 int Pool::purgeLoadedResources() { 72 int Pool::purgeLoadedResources() {
79 std::vector<IPoolListener*>::iterator listener;
80 for (listener = m_listeners.begin(); listener != m_listeners.end(); listener++) {
81 (*listener)->poolCleared();
82 }
83 int count = 0; 73 int count = 0;
84 std::vector<PoolEntry*>::iterator it; 74 std::vector<PoolEntry*>::iterator it;
85 for (it = m_entries.begin(); it != m_entries.end(); it++) { 75 for (it = m_entries.begin(); it != m_entries.end(); it++) {
86 PoolEntry* entry = *it; 76 PoolEntry* entry = *it;
87 if( entry->resource && entry->resource->getRefCount() == 0 ) { 77 if( entry->resource && entry->resource->getRefCount() == 0 ) {
138 FL_ERR(_log, msg); 128 FL_ERR(_log, msg);
139 129
140 throw NotFound(msg.str); 130 throw NotFound(msg.str);
141 } 131 }
142 132
133 // This branch will only be relevant if the resource has been
134 // loaded successfully before, but for some reason the loader
135 // can't load the resource anymore.
136 // Maybe someone deleted a file under FIFE's hands?
143 if (!entry->resource) { 137 if (!entry->resource) {
144 LMsg msg("No loader was able to load the requested resource "); 138 LMsg msg("The loader was unable to load the resource ");
145 msg << "#" << index << "<" << entry->location->getFilename() 139 msg << "#" << index << "<" << entry->location->getFilename()
146 << "> in pool " << m_name; 140 << "> in pool " << m_name;
147 FL_ERR(_log, msg); 141 FL_ERR(_log, msg);
148 throw NotFound(msg.str); 142 throw NotFound(msg.str);
149 } 143 }
194 amount++; 188 amount++;
195 } 189 }
196 } 190 }
197 } 191 }
198 return amount; 192 return amount;
199 }
200
201 void Pool::addPoolListener(IPoolListener* listener) {
202 m_listeners.push_back(listener);
203 }
204
205 void Pool::removePoolListener(IPoolListener* listener) {
206 std::vector<IPoolListener*>::iterator i = m_listeners.begin();
207 while (i != m_listeners.end()) {
208 if ((*i) == listener) {
209 m_listeners.erase(i);
210 return;
211 }
212 ++i;
213 }
214 } 193 }
215 194
216 void Pool::findAndSetProvider(PoolEntry& entry) { 195 void Pool::findAndSetProvider(PoolEntry& entry) {
217 std::vector<ResourceLoader*>::iterator it = m_loaders.begin(); 196 std::vector<ResourceLoader*>::iterator it = m_loaders.begin();
218 std::vector<ResourceLoader*>::iterator end = m_loaders.end(); 197 std::vector<ResourceLoader*>::iterator end = m_loaders.end();