48 #ifndef __CU_LOADER_H__
49 #define __CU_LOADER_H__
52 #include <unordered_map>
53 #include <unordered_set>
54 #include <cugl/assets/CUJsonValue.h>
55 #include <cugl/util/CUThreadPool.h>
84 typedef std::function<void(const std::string& key, bool success)> LoaderCallback;
87 #pragma mark Polymorphic Base
98 class BaseLoader :
public std::enable_shared_from_this<BaseLoader> {
131 virtual bool read(
const std::string& key,
const std::string& source,
132 LoaderCallback callback,
bool async) {
158 virtual bool read(
const std::shared_ptr<JsonValue>& json,
159 LoaderCallback callback,
bool async) {
176 virtual bool purge(
const std::string& key) {
196 virtual bool purge(
const std::shared_ptr<JsonValue>& json) {
197 return purge(json->key());
211 virtual bool verify(
const std::string& key)
const {
return false; }
215 #pragma mark Constructors
243 virtual void dispose() { _manager =
nullptr; }
261 return init(
nullptr);
278 virtual bool init(
const std::shared_ptr<ThreadPool>& threads) {
284 #pragma mark AssetManager Support
296 return shared_from_this();
353 #pragma mark Loading/Unloading
370 bool load(
const std::string& key,
const std::string& source) {
371 return read(key,source,
nullptr,
false);
390 bool load(
const char* key,
const std::string& source) {
391 return read(std::string(key),source,
nullptr,
false);
410 bool load(
const std::string& key,
const char* source) {
411 return read(key,std::string(source),
nullptr,
false);
430 bool load(
const char* key,
const char* source) {
431 return read(std::string(key),std::string(source),
nullptr,
false);
455 bool load(
const std::shared_ptr<JsonValue>& json) {
456 return read(json,
nullptr,
false);
478 void loadAsync(
const std::string& key,
const std::string& source, LoaderCallback callback) {
479 read(key, source, callback,
true);
501 void loadAsync(
const char* key,
const std::string& source, LoaderCallback callback) {
502 read(std::string(key), source, callback,
true);
524 void loadAsync(
const std::string& key,
const char* source, LoaderCallback callback) {
525 read(key, std::string(source), callback,
true);
547 void loadAsync(
const char* key,
const char* source, LoaderCallback callback) {
548 read(std::string(key), std::string(source), callback,
true);
576 void loadAsync(
const std::shared_ptr<JsonValue>& json, LoaderCallback callback) {
577 read(json, callback,
true);
610 bool unload(
const std::shared_ptr<JsonValue>& json) {
626 #pragma mark Progress Monitoring
650 return verify(std::string(key));
709 return (size == 0 ? 0.0f : ((
float)
loadCount())/size);
716 #pragma mark Templated Middle Layer
736 std::unordered_map<std::string, std::shared_ptr<T>>
_assets;
755 bool purge(
const std::string& key)
override {
756 auto it = _assets.find(key);
757 if (it != _assets.end()) {
775 bool verify(
const std::string& key)
const override {
776 return _assets.find(key) != _assets.end();
780 #pragma mark Constructors
790 #pragma mark Asset Access
801 std::shared_ptr<T>
get(
const std::string& key)
const {
802 auto it = _assets.find(key);
803 return (it == _assets.end() ?
nullptr : it->second);
816 std::shared_ptr<T>
get(
const char* key)
const {
817 auto it = _assets.find(std::string(key));
818 return (it == _assets.end() ?
nullptr : it->second);
831 std::shared_ptr<T>
operator[](
const std::string& key)
const {
return get(key); }
843 std::shared_ptr<T>
operator[](
const char* key)
const {
return get(key); }
846 #pragma mark Asset Loading
856 size_t loadCount()
const override {
return _assets.size(); }
868 size_t waitCount()
const override {
return _queue.size(); }
std::shared_ptr< BaseLoader > getHook()
Definition: CULoader.h:295
std::shared_ptr< ThreadPool > _loader
Definition: CULoader.h:105
void loadAsync(const char *key, const char *source, LoaderCallback callback)
Definition: CULoader.h:547
virtual bool purge(const std::string &key)
Definition: CULoader.h:176
bool unload(const std::string &key)
Definition: CULoader.h:591
Definition: CULoader.h:98
size_t loadCount() const override
Definition: CULoader.h:856
virtual bool init()
Definition: CULoader.h:260
virtual bool read(const std::string &key, const std::string &source, LoaderCallback callback, bool async)
Definition: CULoader.h:131
virtual size_t waitCount() const
Definition: CULoader.h:681
std::shared_ptr< T > operator[](const std::string &key) const
Definition: CULoader.h:831
virtual bool verify(const std::string &key) const
Definition: CULoader.h:211
AssetManager * _manager
Definition: CULoader.h:112
bool load(const char *key, const std::string &source)
Definition: CULoader.h:390
virtual void unloadAll()
Definition: CULoader.h:623
virtual bool init(const std::shared_ptr< ThreadPool > &threads)
Definition: CULoader.h:278
bool load(const std::string &key, const char *source)
Definition: CULoader.h:410
bool load(const std::shared_ptr< JsonValue > &json)
Definition: CULoader.h:455
BaseLoader()
Definition: CULoader.h:222
std::unordered_set< std::string > _queue
Definition: CULoader.h:739
std::unordered_map< std::string, std::shared_ptr< T > > _assets
Definition: CULoader.h:736
bool unload(const char *key)
Definition: CULoader.h:606
std::shared_ptr< ThreadPool > getThreadPool() const
Definition: CULoader.h:308
void setManager(AssetManager *manager)
Definition: CULoader.h:336
virtual void dispose()
Definition: CULoader.h:243
size_t waitCount() const override
Definition: CULoader.h:868
std::shared_ptr< T > operator[](const char *key) const
Definition: CULoader.h:843
bool contains(const std::string &key) const
Definition: CULoader.h:636
virtual bool read(const std::shared_ptr< JsonValue > &json, LoaderCallback callback, bool async)
Definition: CULoader.h:158
bool purge(const std::string &key) override
Definition: CULoader.h:755
void loadAsync(const std::string &key, const char *source, LoaderCallback callback)
Definition: CULoader.h:524
bool verify(const std::string &key) const override
Definition: CULoader.h:775
virtual bool purge(const std::shared_ptr< JsonValue > &json)
Definition: CULoader.h:196
bool load(const std::string &key, const std::string &source)
Definition: CULoader.h:370
bool load(const char *key, const char *source)
Definition: CULoader.h:430
bool complete() const
Definition: CULoader.h:692
Definition: CULoader.h:733
bool contains(const char *key) const
Definition: CULoader.h:649
void loadAsync(const std::shared_ptr< JsonValue > &json, LoaderCallback callback)
Definition: CULoader.h:576
void loadAsync(const std::string &key, const std::string &source, LoaderCallback callback)
Definition: CULoader.h:478
~BaseLoader()
Definition: CULoader.h:227
const AssetManager * getManager() const
Definition: CULoader.h:348
void setThreadPool(const std::shared_ptr< ThreadPool > &threads)
Definition: CULoader.h:324
Definition: CUAssetManager.h:83
Definition: CUAction.h:51
void loadAsync(const char *key, const std::string &source, LoaderCallback callback)
Definition: CULoader.h:501
Loader()
Definition: CULoader.h:787
float progress() const
Definition: CULoader.h:707
virtual size_t loadCount() const
Definition: CULoader.h:666
void unloadAll() override
Definition: CULoader.h:877