#include <deque>
#include <cstdint>
#include <msp/core/mutex.h>
+#include <msp/core/noncopyable.h>
#include <msp/core/semaphore.h>
#include <msp/core/thread.h>
#include <msp/datafile/collection.h>
};
-class ResourceManager
+class ResourceManager: public NonCopyable
{
public:
enum LoadingPolicy
class LoadingThread: public Thread
{
private:
- Semaphore sem;
+ Msp::Semaphore sem;
Mutex queue_mutex;
std::deque<ManagedResource *> async_queue;
std::deque<ManagedResource *> sync_queue;
void terminate();
};
- LoadingPolicy policy;
- bool async_loads;
+ LoadingPolicy policy = LOAD_ON_DEMAND;
+ bool async_loads = true;
mutable Mutex map_mutex;
std::map<const Resource *, ManagedResource> resources;
std::deque<ManagedResource *> queue;
- std::uint64_t total_data_size;
- std::uint64_t size_limit;
- unsigned frame;
- unsigned min_retain_frames;
- unsigned max_retain_frames;
- unsigned next_unload;
+ std::uint64_t total_data_size = 0;
+ std::uint64_t size_limit = 0;
+ unsigned frame = 0;
+ unsigned min_retain_frames = 30;
+ unsigned max_retain_frames = 0;
+ unsigned next_unload = 0;
LoadingThread thread;
public:
- ResourceManager();
~ResourceManager();
void set_loading_policy(LoadingPolicy);
void set_max_retain_frames(unsigned);
void add_resource(Resource &);
+ void move_resource(Resource &, Resource &);
private:
const ManagedResource &get_managed_resource(const Resource &) const;
ManagedResource &get_managed_resource(const Resource &);