6#include <hpp/event.hpp>
12#include <unordered_map>
182 std::lock_guard<std::mutex> lock(asset_mutex_);
191 std::lock_guard<std::mutex> lock(asset_mutex_);
203 const auto& uid =
get_uuid(location);
204 if(!
override && !uid.is_nil())
209 std::lock_guard<std::mutex> lock(asset_mutex_);
211 auto& metainfo = asset_meta_[
meta.uid];
212 metainfo.location = location;
213 metainfo.meta =
meta;
217 metainfo.meta.uid = uid;
221 APPLOG_TRACE(
"{} - {} -> {}", __func__, hpp::to_string(metainfo.meta.uid), location);
232 auto get_uuid(
const std::string& location)
const ->
const hpp::uuid&
234 std::lock_guard<std::mutex> lock(asset_mutex_);
236 for(
const auto& kvp : asset_meta_)
238 const auto& uid = kvp.first;
239 const auto& metainfo = kvp.second;
240 if(metainfo.location == location)
246 static const hpp::uuid uid;
257 std::lock_guard<std::mutex> lock(asset_mutex_);
259 auto it = asset_meta_.find(
id);
260 if(it == asset_meta_.end())
262 static const meta empty;
276 std::lock_guard<std::mutex> lock(asset_mutex_);
277 for(
auto& kvp : asset_meta_)
279 auto& uid = kvp.first;
280 auto& metainfo = kvp.second;
281 if(metainfo.location == key)
283 APPLOG_TRACE(
"{}::{} - {} -> {}", __func__, hpp::to_string(uid), key, new_key);
285 metainfo.location = new_key;
296 std::lock_guard<std::mutex> lock(asset_mutex_);
297 for(
auto& kvp : asset_meta_)
299 auto& uid = kvp.first;
300 auto& metainfo = kvp.second;
301 if(metainfo.location == key)
303 APPLOG_TRACE(
"{}::{} - {}", __func__, hpp::to_string(uid), key);
305 asset_meta_.erase(uid);
313 mutable std::mutex asset_mutex_{};
337 virtual void unload_single(tpp::thread_pool& pool,
const std::string& key) = 0;
344 virtual void unload_group(tpp::thread_pool& pool,
const std::string& group) = 0;
377 pool.stop(
handle.task_id());
391 if(predicate(it->second))
393 auto&
handle = it->second;
422 void unload_group(tpp::thread_pool& pool,
const std::string& group)
final
427 const auto&
id = it.id();
428 hpp::string_view id_view(
id);
429 return id_view.starts_with(group);
443 const auto&
id = it.id();
456 std::vector<asset_handle<T>> result;
462 if(predicate(kvp.second))
464 result.emplace_back(kvp.second);
476 auto get_group(
const std::string& group)
const -> std::vector<asset_handle<T>>
481 const auto&
id = it.id();
482 hpp::string_view id_view(
id);
483 return id_view.starts_with(group);
Manages asset metadata and provides functionality for adding, removing, and querying assets.
void remove_asset(const std::string &key)
Removes an asset from the database.
void rename_asset(const std::string &key, const std::string &new_key)
Renames an asset.
void set_database(const database_t &rhs)
Sets the asset database.
auto get_metadata(const hpp::uuid &id) const -> const meta &
Gets the metadata of an asset based on its UUID.
void remove_all()
Removes all assets from the database.
static auto generate_id(const fs::path &p) -> hpp::uuid
Generates a UUID based on the file path.
auto get_database() const -> const database_t &
Gets the entire asset database.
std::map< hpp::uuid, meta > database_t
Type definition for the asset database.
auto get_uuid(const std::string &location) const -> const hpp::uuid &
Gets the UUID of an asset based on its location.
auto add_asset(const std::string &location, const asset_meta &meta, bool override) -> hpp::uuid
Adds an asset to the database.
#define APPLOG_TRACE(...)
auto generate_uuid() -> hpp::uuid
Represents a handle to an asset, providing access and management functions.
Manages storage and loading of assets of a specific type.
callable< bool(tpp::thread_pool &pool, asset_handle< T > &, const std::string &)> load_from_file_t
Function type for loading from file.
void unload_with_condition(tpp::thread_pool &pool, const predicate_t &predicate)
Unloads assets that satisfy a condition.
load_from_instance_t load_from_instance
Function for loading assets from instance.
auto get_group(const std::string &group) const -> std::vector< asset_handle< T > >
Gets all assets in a specified group.
void unload_all(tpp::thread_pool &pool) final
Unloads all assets.
callable< bool(tpp::thread_pool &pool, asset_handle< T > &, std::shared_ptr< T >)> load_from_instance_t
callable< bool(const asset_handle< T > &)> predicate_t
Function type for loading from instance. Predicate function type.
void unload_handle(tpp::thread_pool &pool, asset_handle< T > &handle)
Unloads a handle.
std::function< F > callable
Type alias for callable functions.
std::unordered_map< std::string, asset_handle< T > > request_container_t
Container for asset requests.
std::recursive_mutex container_mutex
Mutex for container operations.
~asset_storage() override=default
void unload_group(tpp::thread_pool &pool, const std::string &group) final
Unloads all assets in a specified group.
load_from_file_t load_from_file
Function for loading assets from file.
auto get_with_condition(const predicate_t &predicate) const -> std::vector< asset_handle< T > >
Gets assets that satisfy a condition.
void unload_single(tpp::thread_pool &pool, const std::string &key) final
Unloads a single asset by its key.
request_container_t container
Container for asset requests.
Abstract base class for asset storage.
virtual void unload_single(tpp::thread_pool &pool, const std::string &key)=0
Unloads a single asset by its key.
virtual void unload_all(tpp::thread_pool &pool)=0
Unloads all assets.
virtual ~basic_storage()=default
virtual void unload_group(tpp::thread_pool &pool, const std::string &group)=0
Unloads all assets in a specified group.
compression_quality compression
struct unravel::texture_importer_meta::quality_meta quality