fn hash(str input)
{
str lowercase = std::string::to_lower(input);
u32 length = std::string::length(lowercase);
u8 bytes[length];
for(u8 i = 0, i < length, i = i + 1)
{
bytes[i] = std::string::at(lowercase, i);
}
u32 hash = std::hash::crc32(bytes, 0xFFFFFFFF, 0x04C11DB7, 0xFFFFFFFF, true, true);
return hash;
};
enum ObjectType : u32
{
// r::*
ResourceMetadata = hash("r::ResourceMetadata"),
FileInfoMetadata = hash("r::FileInfoMetadata"),
BinaryBlobMetadata = hash("r::BinaryBlobMetadata"),
BoundBox = hash("r::BoundBox"),
// rend::*
TextureMetadata = hash("rend::TextureMetadata"),
TextureDesc = hash("rend::TextureDesc"),
MeshMetadata = hash("rend::MeshMetadata"),
MeshFormat = hash("rend::MeshFormat"),
ParticleSystemMetadata = hash("rend::ParticleSystemMetadata"),
// snd::*
ExternalSourceMetadata = hash("snd::ExternalSourceMetadata"),
SoundBankMetadata = hash("snd::SoundBankMetadata"),
// physics::*
DMMAnimationMetadata = hash("physics::DMMAnimationMetadata"),
HavokClothMetadata = hash("physics::HavokClothMetadata"),
MorphemePackMetadata = hash("physics::MorphemePackMetadata"),
RBFMetadata = hash("physics::RBFMetadata"),
MorphemeMetadata = hash("physics::MorphemeMetadata"),
CollisionPackageMetadata = hash("physics::CollisionPackageMetadata"),
SkeletonMetadata = hash("physics::SkeletonMetadata"),
// physics::CollisionPackageMetadata::*
RigidBodyInfo = hash("physics::CollisionPackageMetadata::RigidBodyInfo"),
ShapeInfo = hash("physics::CollisionPackageMetadata::ShapeInfo"),
//unknown, seems to contain rid
RIDObject = 0x1BFC72D5,
RIDListEntry = 0x35AE54C1,
// name assigned by me until real name found
RIDList = 0xE974FDFF
};
match(objectType)
{
(ObjectType::ResourceMetadata): ResourceMetadata data [[inline]];
(ObjectType::TextureMetadata): TextureMetadata data [[inline]];
(ObjectType::TextureDesc): TextureDesc data [[inline]];
(ObjectType::DMMAnimationMetadata): DMMAnimationMetadata data [[inline]];
(ObjectType::RIDObject): UnknownObject data [[inline]];
(ObjectType::FileInfoMetadata): FileInfoMetadata data [[inline]];
(ObjectType::RIDList): RIDList data [[inline]];
(ObjectType::RIDListEntry): UnknownObject data [[inline]];
(ObjectType::BinaryBlobMetadata): BinaryBlobMetadata data [[inline]];
(ObjectType::MeshMetadata): MeshMetadata data [[inline]];
(ObjectType::MeshFormat): MeshFormat data [[inline]];
(ObjectType::BoundBox): BoundBox data [[inline]];
(ObjectType::ParticleSystemMetadata): ParticleSystemMetadata data [[inline]];
(ObjectType::MorphemePackMetadata): MorphemePackMetadata data [[inline]];
(ObjectType::HavokClothMetadata): HavokClothMetadata data [[inline]];
(ObjectType::RBFMetadata): RBFMetadata data [[inline]];
(ObjectType::MorphemeMetadata): MorphemeMetadata data [[inline]];
(ObjectType::SoundBankMetadata): SoundBankMetadata data [[inline]];
(ObjectType::CollisionPackageMetadata): CollisionPackageMetadata data [[inline]];
(ObjectType::RigidBodyInfo): RigidBodyInfo data [[inline]];
(ObjectType::ShapeInfo): ShapeInfo data [[inline]];
(ObjectType::SkeletonMetadata): SkeletonMetadata data;
(ObjectType::ExternalSourceMetadata): ExternalSourceMetadata data [[inline]];
(_): std::error(std::format("Unknown object type at {}", $));
}
my pattern slows to a crawl. My assumption is that this is because the hash is recalculated every time. I have switched back to hardcoded hashes, but it would be great if this was a viable approach