X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=source%2Fresources%2Fresourcemanager.cpp;h=91b374244090f78397b9cbfe78db63c36c97026b;hp=5358183f24bc5a39d156b6f9bcab1c87136bac31;hb=5871764de7aa23d2c40cac03ad9d07088fb57e06;hpb=3a1b9cbe2441ae670a97541dc8ccb0a2860c8302 diff --git a/source/resources/resourcemanager.cpp b/source/resources/resourcemanager.cpp index 5358183f..91b37424 100644 --- a/source/resources/resourcemanager.cpp +++ b/source/resources/resourcemanager.cpp @@ -3,6 +3,7 @@ #include #include #include +#include "error.h" #include "resourcemanager.h" #include "resources.h" #include "resourceobserver.h" @@ -21,17 +22,6 @@ resource_load_error::resource_load_error(const string &name, const exception &ex { } -ResourceManager::ResourceManager(): - policy(LOAD_ON_DEMAND), - async_loads(true), - total_data_size(0), - size_limit(0), - frame(0), - min_retain_frames(30), - max_retain_frames(0), - next_unload(0) -{ } - ResourceManager::~ResourceManager() { thread.terminate(); @@ -67,10 +57,22 @@ void ResourceManager::set_max_retain_frames(unsigned f) void ResourceManager::add_resource(Resource &r) { + if(r.get_manager()!=this) + throw invalid_operation("ResourceManager::add_resource"); MutexLock lock(map_mutex); insert_unique(resources, &r, ManagedResource(r)); } +void ResourceManager::move_resource(Resource &from, Resource &to) +{ + if(to.get_manager()!=this || from.get_manager_data()!=to.get_manager_data()) + throw invalid_operation("ResourceManager::move_resource"); + ManagedResource *managed = reinterpret_cast(to.get_manager_data()); + MutexLock lock(map_mutex); + insert_unique(resources, &to, *managed); + resources.erase(&from); +} + const ResourceManager::ManagedResource &ResourceManager::get_managed_resource(const Resource &r) const { MutexLock lock(map_mutex); @@ -401,7 +403,7 @@ void ResourceManager::LoadingThread::main() catch(const exception &e) { MutexLock lock(queue_mutex); - error_queue.push_back(resource_load_error(managed->location.name, e)); + error_queue.emplace_back(managed->location.name, e); managed->state = ManagedResource::LOAD_ERROR; }