#include <msp/debug/demangle.h>
#include <msp/strings/format.h>
#include <msp/time/utils.h>
+#include "error.h"
#include "resourcemanager.h"
#include "resources.h"
#include "resourceobserver.h"
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<ManagedResource *>(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);
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;
}