mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-10-01 21:48:41 +00:00
61 lines
1.6 KiB
C
61 lines
1.6 KiB
C
// Copyright (c) Epic Games Tools
|
|
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
|
|
|
internal void
|
|
lnk_hasher_init(LNK_Hasher *hasher, LNK_HashKind kind)
|
|
{
|
|
hasher->kind = kind;
|
|
switch (kind) {
|
|
case LNK_HashKind_BLAKE3: blake3_hasher_init(&hasher->u.blake3); break;
|
|
case LNK_HashKind_XXHash: XXH3_64bits_reset(&hasher->u.xxhash); break;
|
|
default: InvalidPath; break;
|
|
}
|
|
}
|
|
|
|
internal void
|
|
lnk_hasher_update(LNK_Hasher *hasher, void *data, U64 size)
|
|
{
|
|
switch (hasher->kind) {
|
|
case LNK_HashKind_BLAKE3: blake3_hasher_update(&hasher->u.blake3, data, size); break;
|
|
case LNK_HashKind_XXHash: XXH3_64bits_update(&hasher->u.xxhash, data, size); break;
|
|
default: InvalidPath; break;
|
|
}
|
|
}
|
|
|
|
internal U64
|
|
lnk_hasher_digest(LNK_Hasher *hasher)
|
|
{
|
|
U64 hash = 0;
|
|
switch (hasher->kind) {
|
|
case LNK_HashKind_BLAKE3: blake3_hasher_finalize(&hasher->u.blake3, (U8 *)&hash, sizeof(hash)); break;
|
|
case LNK_HashKind_XXHash: hash = XXH3_64bits_digest(&hasher->u.xxhash); break;
|
|
default: InvalidPath; break;
|
|
}
|
|
return hash;
|
|
}
|
|
|
|
internal String8
|
|
lnk_string_hash_kind(LNK_HashKind hash_kind)
|
|
{
|
|
#define X(NAME) case LNK_HashKind_##NAME: return str8_lit(Stringify(NAME));
|
|
switch (hash_kind) {
|
|
LNK_HashKind_XList
|
|
}
|
|
#undef X
|
|
return str8_zero();
|
|
}
|
|
|
|
internal LNK_HashKind
|
|
lnk_hash_kind_from_llvm(LLVM_GHashAlgEnum v)
|
|
{
|
|
switch (v) {
|
|
case LLVM_GHashAlg_SHA1:
|
|
case LLVM_GHashAlg_SHA1_8:
|
|
return LNK_HashKind_Null;
|
|
case LLVM_GHashAlg_BLAKE3:
|
|
return LNK_HashKind_BLAKE3;
|
|
}
|
|
return LNK_HashKind_Null;
|
|
}
|
|
|