21 ResourceIdentifier(std::string path,
const uintptr_t owner = 0,
const std::shared_ptr<Archive> parent =
nullptr)
22 : mPath(std::move(path)), mOwner(owner), mParent(parent) {
25 ResourceIdentifier(uint64_t hash,
const uintptr_t owner = 0,
const std::shared_ptr<Archive> parent =
nullptr)
26 : mPath(hash), mOwner(owner), mParent(parent) {
30 return mOwner == rhs.mOwner && mPath == rhs.mPath && mParent == rhs.mParent;
34 return std::holds_alternative<std::string>(mPath);
38 return std::holds_alternative<uint64_t>(mPath);
42 static const std::string emptyPath =
"";
43 return IsPath() ? std::get<std::string>(mPath) : emptyPath;
47 return IsHash() ? std::get<uint64_t>(mPath) : 0;
67 mPath = std::move(path);
75 mPath = std::move(pathOrHash);
82 void SetParent(
const std::shared_ptr<Archive>& parent) {
87 static size_t HashCombine(
size_t lhs,
size_t rhs) {
88 lhs ^= rhs + 0x9e3779b9 + (lhs << 6) + (lhs >> 2);
92 size_t GetHash()
const {
93 return CalculateHash();
96 size_t CalculateHash()
const {
98 HashCombine(std::hash<size_t>{}(mPath.index()),
101 size_t hash = HashCombine(pathHash, std::hash<std::uintptr_t>{}(mOwner));
102 hash = HashCombine(hash, std::hash<std::shared_ptr<Archive>>{}(mParent));
106 std::variant<std::string, uint64_t> mPath = std::string();
107 uintptr_t mOwner = 0;
108 std::shared_ptr<Archive> mParent =
nullptr;
116 return rcd.GetHash();
Uniquely identifies a cached resource by path/hash, owner, and source archive.
Definition ResourceIdentifier.h:15
const std::string & GetPath() const
Definition ResourceIdentifier.h:41
void SetPath(std::string &&path)
Definition ResourceIdentifier.h:66
uintptr_t GetOwner() const
Definition ResourceIdentifier.h:54
ResourceIdentifier()=default
ResourceIdentifier(uint64_t hash, const uintptr_t owner=0, const std::shared_ptr< Archive > parent=nullptr)
Definition ResourceIdentifier.h:25
bool operator==(const ResourceIdentifier &rhs) const
Definition ResourceIdentifier.h:29
bool IsHash() const
Definition ResourceIdentifier.h:37
void SetParent(const std::shared_ptr< Archive > &parent)
Definition ResourceIdentifier.h:82
void SetOwner(uintptr_t owner)
Definition ResourceIdentifier.h:78
bool IsPath() const
Definition ResourceIdentifier.h:33
ResourceIdentifier(std::string path, const uintptr_t owner=0, const std::shared_ptr< Archive > parent=nullptr)
Definition ResourceIdentifier.h:21
uint64_t GetPathHash() const
Definition ResourceIdentifier.h:46
const std::shared_ptr< Archive > & GetParent() const
Definition ResourceIdentifier.h:58
void SetHash(uint64_t hash)
Definition ResourceIdentifier.h:70
void SetPathOrHash(std::variant< std::string, uint64_t > pathOrHash)
Definition ResourceIdentifier.h:74
void SetPath(const std::string &path)
Definition ResourceIdentifier.h:62
const std::variant< std::string, uint64_t > & GetPathOrHash() const
Definition ResourceIdentifier.h:50
Core namespace for the libultraship engine framework.
Definition gfx_direct3d_common.h:14
std::hash specialization for ResourceIdentifier, used by unordered containers.
Definition ResourceIdentifier.h:114
size_t operator()(const ResourceIdentifier &rcd) const
Definition ResourceIdentifier.h:115