X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fresources%2Fresourcemanager.cpp;h=91acb3d0baf623e89fea7777cd022006ec847401;hb=5b311d10d50aa1fe0eb4ed4b8e41f0c58e9e7cbf;hp=30f75013252fe2397819cb5cb5a49330e54347de;hpb=7aaec9a70b8d7733429bec043f8e33e02956f266;p=libs%2Fgl.git diff --git a/source/resources/resourcemanager.cpp b/source/resources/resourcemanager.cpp index 30f75013..91acb3d0 100644 --- a/source/resources/resourcemanager.cpp +++ b/source/resources/resourcemanager.cpp @@ -1,4 +1,4 @@ -#include +#include #include #include #include @@ -118,8 +118,7 @@ void ResourceManager::load_resource(Resource &r) if(async_loads) { managed.state = ManagedResource::LOAD_QUEUED; - LoadQueue::iterator i; - for(i=queue.begin(); (i!=queue.end() && (*i)->load_priority>=managed.load_priority); ++i) ; + auto i = find_if(queue, [&managed](ManagedResource *q){ return q->load_priority>managed.load_priority; }); queue.insert(i, &managed); } else @@ -156,15 +155,15 @@ void ResourceManager::remove_resource(Resource &r) ManagedResource::State state = managed.state; if(state==ManagedResource::LOAD_QUEUED) { - LoadQueue::iterator i = find(queue.begin(), queue.end(), &managed); + auto i = find(queue, &managed); if(i!=queue.end()) queue.erase(i); } else if(state>ManagedResource::LOAD_QUEUED && state::const_iterator i=managed.observers.begin(); i!=managed.observers.end(); ++i) - (*i)->resource_removed(r); + for(ResourceObserver *o: managed.observers) + o->resource_removed(r); MutexLock lock(map_mutex); remove_existing(resources, &r); @@ -202,9 +201,9 @@ void ResourceManager::tick() unload_by_age(); next_unload = frame; - for(ResourceMap::iterator i=resources.begin(); i!=resources.end(); ++i) - if(i->second.state==ManagedResource::LOADED) - next_unload = min(next_unload, i->second.last_used); + for(const auto &kvp: resources) + if(kvp.second.state==ManagedResource::LOADED) + next_unload = min(next_unload, kvp.second.last_used); next_unload = (next_unloadlast_used+min_retain_framesstate = ManagedResource::NOT_LOADED; + for(ManagedResource *r: queue) + r->state = ManagedResource::NOT_LOADED; queue.clear(); return; } @@ -237,11 +236,11 @@ void ResourceManager::unload_by_age() { unsigned unload_limit = frame-max_retain_frames; - for(ResourceMap::iterator i=resources.begin(); i!=resources.end(); ++i) - if(i->second.state==ManagedResource::LOADED && i->second.last_usedsecond.unload(); - total_data_size -= i->second.data_size; + kvp.second.unload(); + total_data_size -= kvp.second.data_size; } } @@ -253,13 +252,13 @@ void ResourceManager::unload_by_size() { ManagedResource *best = 0; UInt64 best_impact = 0; - for(ResourceMap::iterator i=resources.begin(); i!=resources.end(); ++i) - if(i->second.state==ManagedResource::LOADED && i->second.last_usedsecond.data_size*(frame-i->second.last_used); + UInt64 impact = kvp.second.data_size*(frame-kvp.second.last_used); if(!best || impact>best_impact) { - best = &i->second; + best = &kvp.second; best_impact = impact; } } @@ -336,8 +335,8 @@ void ResourceManager::ManagedResource::finish_loading(bool successful) state = LOADED; data_size = resource->get_data_size(); - for(vector::const_iterator i=observers.begin(); i!=observers.end(); ++i) - (*i)->resource_loaded(*resource); + for(ResourceObserver *o: observers) + o->resource_loaded(*resource); } else { @@ -356,8 +355,8 @@ void ResourceManager::ManagedResource::unload() resource->unload(); state = NOT_LOADED; - for(vector::const_iterator i=observers.begin(); i!=observers.end(); ++i) - (*i)->resource_unloaded(*resource); + for(ResourceObserver *o: observers) + o->resource_unloaded(*resource); } void ResourceManager::ManagedResource::add_observer(ResourceObserver &w) @@ -368,7 +367,7 @@ void ResourceManager::ManagedResource::add_observer(ResourceObserver &w) void ResourceManager::ManagedResource::remove_observer(ResourceObserver &w) { - vector::iterator end = remove(observers.begin(), observers.end(), &w); + auto end = remove(observers.begin(), observers.end(), &w); if(end!=observers.end()) observers.erase(end, observers.end()); } @@ -407,7 +406,8 @@ void ResourceManager::LoadingThread::main() } MutexLock lock(queue_mutex); - sync_queue.splice(sync_queue.end(), async_queue, async_queue.begin()); + sync_queue.push_back(async_queue.front()); + async_queue.pop_front(); wait_for_work = async_queue.empty(); } else @@ -415,7 +415,7 @@ void ResourceManager::LoadingThread::main() } } -ResourceManager::ManagedResource *ResourceManager::LoadingThread::front(LoadQueue &que) +ResourceManager::ManagedResource *ResourceManager::LoadingThread::front(deque &que) { MutexLock lock(queue_mutex); if(que.empty()) @@ -459,10 +459,10 @@ bool ResourceManager::LoadingThread::try_remove_resource(ManagedResource &r) { MutexLock lock(queue_mutex); - LoadQueue::iterator i = find(async_queue.begin(), async_queue.end(), &r); + auto i = find(async_queue, &r); if(i==async_queue.end()) { - i = find(sync_queue.begin(), sync_queue.end(), &r); + i = find(sync_queue, &r); if(i!=sync_queue.end()) { sync_queue.erase(i); @@ -520,7 +520,8 @@ bool ResourceManager::LoadingThread::sync() { MutexLock lock(queue_mutex); bool was_empty = async_queue.empty(); - async_queue.splice(async_queue.end(), sync_queue, sync_queue.begin()); + async_queue.push_back(sync_queue.front()); + sync_queue.pop_front(); if(was_empty) sem.signal(); }