X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fresources%2Fresourcemanager.h;h=e2926be41a82a98ba184c7a6b5194a11a24db4bc;hb=99ca354f18119f82f1adeca100cd665a8f640317;hp=2596999750724f32c239da69c4f261bc6ae324a3;hpb=e9a898f315b5d1396f196d785913a283c30940f2;p=libs%2Fgl.git diff --git a/source/resources/resourcemanager.h b/source/resources/resourcemanager.h index 25969997..e2926be4 100644 --- a/source/resources/resourcemanager.h +++ b/source/resources/resourcemanager.h @@ -1,8 +1,10 @@ #ifndef MSP_GL_RESOURCEMANAGER_H_ #define MSP_GL_RESOURCEMANAGER_H_ -#include +#include +#include #include +#include #include #include #include @@ -22,7 +24,7 @@ public: }; -class ResourceManager +class ResourceManager: public NonCopyable { public: enum LoadingPolicy @@ -61,7 +63,7 @@ private: Resource::AsyncLoader *loader; State state; unsigned last_used; - UInt64 data_size; + std::uint64_t data_size; std::vector observers; ManagedResource(Resource &); @@ -79,15 +81,15 @@ private: class LoadingThread: public Thread { private: - Semaphore sem; + Msp::Semaphore sem; Mutex queue_mutex; - std::list async_queue; - std::list sync_queue; + std::deque async_queue; + std::deque sync_queue; unsigned capacity; unsigned size; std::list error_queue; Mutex data_size_mutex; - UInt64 loaded_data_size; + std::uint64_t loaded_data_size; volatile bool done; public: @@ -96,7 +98,7 @@ private: private: virtual void main(); - ManagedResource *front(std::list &); + ManagedResource *front(std::deque &); public: void add_resource(ManagedResource &); @@ -106,35 +108,35 @@ private: public: bool sync(); bool needs_work() const { return size resources; - std::list queue; - UInt64 total_data_size; - UInt64 size_limit; - unsigned frame; - unsigned min_retain_frames; - unsigned max_retain_frames; - unsigned next_unload; + std::deque queue; + 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_async_loads(bool); - void set_size_limit(UInt64); + void set_size_limit(std::uint64_t); void set_min_retain_frames(unsigned); 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 &); @@ -157,7 +159,7 @@ private: void unload_by_age(); void unload_by_size(); public: - UInt64 get_total_data_size() const { return total_data_size; } + std::uint64_t get_total_data_size() const { return total_data_size; } private: static bool age_order(ManagedResource *, ManagedResource *);