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>
81 typedef std::function<void(const std::string& key, bool success)>
LoaderCallback;
84 #pragma mark Polymorphic Base
95 class BaseLoader :
public std::enable_shared_from_this<BaseLoader> {
121 virtual bool read(
const std::string& key,
const std::string& source,
122 LoaderCallback callback,
bool async) {
148 virtual bool read(
const std::shared_ptr<JsonValue>& json,
149 LoaderCallback callback,
bool async) {
167 virtual bool purge(
const std::string& key) {
182 virtual bool verify(
const std::string& key)
const {
return false; }
186 #pragma mark Constructors
232 return init(
nullptr);
249 virtual bool init(
const std::shared_ptr<ThreadPool>& threads) {
254 #pragma mark AssetManager Support
267 return shared_from_this();
299 #pragma mark Loading/Unloading
316 bool load(
const std::string& key,
const std::string& source) {
317 return read(key,source,
nullptr,
false);
336 bool load(
const char* key,
const std::string& source) {
337 return read(std::string(key),source,
nullptr,
false);
356 bool load(
const std::string& key,
const char* source) {
357 return read(key,std::string(source),
nullptr,
false);
376 bool load(
const char* key,
const char* source) {
377 return read(std::string(key),std::string(source),
nullptr,
false);
401 bool load(
const std::shared_ptr<JsonValue>& json) {
402 return read(json,
nullptr,
false);
424 void loadAsync(
const std::string& key,
const std::string& source, LoaderCallback callback) {
425 read(key, source, callback,
true);
447 void loadAsync(
const char* key,
const std::string& source, LoaderCallback callback) {
448 read(std::string(key), source, callback,
true);
470 void loadAsync(
const std::string& key,
const char* source, LoaderCallback callback) {
471 read(key, std::string(source), callback,
true);
493 void loadAsync(
const char* key,
const char* source, LoaderCallback callback) {
494 read(std::string(key), std::string(source), callback,
true);
522 void loadAsync(
const std::shared_ptr<JsonValue>& json, LoaderCallback callback) {
523 read(json, callback,
true);
568 #pragma mark Progress Monitoring
592 return verify(std::string(key));
651 return (size == 0 ? 0.0f : ((
float)
loadCount())/size);
658 #pragma mark Templated Middle Layer
678 std::unordered_map<std::string, std::shared_ptr<T>>
_assets;
697 bool purge(
const std::string& key)
override {
698 auto it = _assets.find(key);
699 if (it != _assets.end()) {
717 bool verify(
const std::string& key)
const override {
718 return _assets.find(key) != _assets.end();
722 #pragma mark Constructors
732 #pragma mark Asset Access
743 std::shared_ptr<T>
get(
const std::string& key)
const {
744 auto it = _assets.find(key);
745 return (it == _assets.end() ?
nullptr : it->second);
758 std::shared_ptr<T>
get(
const char* key)
const {
759 auto it = _assets.find(std::string(key));
760 return (it == _assets.end() ?
nullptr : it->second);
773 std::shared_ptr<T>
operator[](
const std::string& key)
const {
return get(key); }
785 std::shared_ptr<T>
operator[](
const char* key)
const {
return get(key); }
788 #pragma mark Asset Loading
798 size_t loadCount()
const override {
return _assets.size(); }
810 size_t waitCount()
const override {
return _queue.size(); }
std::shared_ptr< BaseLoader > getHook()
Definition: CULoader.h:266
std::shared_ptr< ThreadPool > _loader
Definition: CULoader.h:102
void loadAsync(const char *key, const char *source, LoaderCallback callback)
Definition: CULoader.h:493
virtual bool purge(const std::string &key)
Definition: CULoader.h:167
bool unload(const std::string &key)
Definition: CULoader.h:537
Definition: CULoader.h:95
size_t loadCount() const override
Definition: CULoader.h:798
virtual bool init()
Definition: CULoader.h:231
virtual bool read(const std::string &key, const std::string &source, LoaderCallback callback, bool async)
Definition: CULoader.h:121
virtual size_t waitCount() const
Definition: CULoader.h:623
std::shared_ptr< T > operator[](const std::string &key) const
Definition: CULoader.h:773
virtual bool verify(const std::string &key) const
Definition: CULoader.h:182
bool load(const char *key, const std::string &source)
Definition: CULoader.h:336
virtual void unloadAll()
Definition: CULoader.h:565
virtual bool init(const std::shared_ptr< ThreadPool > &threads)
Definition: CULoader.h:249
bool load(const std::string &key, const char *source)
Definition: CULoader.h:356
bool load(const std::shared_ptr< JsonValue > &json)
Definition: CULoader.h:401
BaseLoader()
Definition: CULoader.h:193
std::unordered_set< std::string > _queue
Definition: CULoader.h:681
std::unordered_map< std::string, std::shared_ptr< T > > _assets
Definition: CULoader.h:678
std::function< void(const std::string &key, bool success)> LoaderCallback
Definition: CULoader.h:81
bool unload(const char *key)
Definition: CULoader.h:552
std::shared_ptr< ThreadPool > getThreadPool() const
Definition: CULoader.h:279
virtual void dispose()
Definition: CULoader.h:214
size_t waitCount() const override
Definition: CULoader.h:810
std::shared_ptr< T > operator[](const char *key) const
Definition: CULoader.h:785
bool contains(const std::string &key) const
Definition: CULoader.h:578
virtual bool read(const std::shared_ptr< JsonValue > &json, LoaderCallback callback, bool async)
Definition: CULoader.h:148
bool purge(const std::string &key) override
Definition: CULoader.h:697
void loadAsync(const std::string &key, const char *source, LoaderCallback callback)
Definition: CULoader.h:470
bool verify(const std::string &key) const override
Definition: CULoader.h:717
bool load(const std::string &key, const std::string &source)
Definition: CULoader.h:316
bool load(const char *key, const char *source)
Definition: CULoader.h:376
bool complete() const
Definition: CULoader.h:634
Definition: CULoader.h:675
bool contains(const char *key) const
Definition: CULoader.h:591
void loadAsync(const std::shared_ptr< JsonValue > &json, LoaderCallback callback)
Definition: CULoader.h:522
void loadAsync(const std::string &key, const std::string &source, LoaderCallback callback)
Definition: CULoader.h:424
~BaseLoader()
Definition: CULoader.h:198
void setThreadPool(const std::shared_ptr< ThreadPool > &threads)
Definition: CULoader.h:295
Definition: CUAnimationNode.h:52
void loadAsync(const char *key, const std::string &source, LoaderCallback callback)
Definition: CULoader.h:447
Loader()
Definition: CULoader.h:729
float progress() const
Definition: CULoader.h:649
virtual size_t loadCount() const
Definition: CULoader.h:608
void unloadAll() override
Definition: CULoader.h:819