Files
raddebugger/src/linker/lnk_hasher.c
T

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;
}