Files
dl/third/JoltPhysics/Jolt/Core/Factory.h
T
2026-09-16 14:07:40 +08:00

55 lines
1.4 KiB
C++
Vendored

// Jolt Physics Library (https://github.com/jrouwe/JoltPhysics)
// SPDX-FileCopyrightText: 2021 Jorrit Rouwe
// SPDX-License-Identifier: MIT
#pragma once
#include <Jolt/Core/RTTI.h>
#include <Jolt/Core/UnorderedMap.h>
JPH_NAMESPACE_BEGIN
/// This class is responsible for creating instances of classes based on their name or hash and is mainly used for deserialization of saved data.
class JPH_EXPORT Factory
{
public:
JPH_OVERRIDE_NEW_DELETE
/// Create an object
void * CreateObject(const char *inName);
/// Find type info for a specific class by name
const RTTI * Find(const char *inName);
/// Find type info for a specific class by hash
const RTTI * Find(uint32 inHash);
/// Register an object with the factory. Returns false on failure.
bool Register(const RTTI *inRTTI);
/// Register a list of objects with the factory. Returns false on failure.
bool Register(const RTTI **inRTTIs, uint inNumber);
/// Unregisters all types
void Clear();
/// Get all registered classes
Array<const RTTI *> GetAllClasses() const;
/// Singleton factory instance
static Factory * sInstance;
private:
using ClassNameMap = UnorderedMap<string_view, const RTTI *>;
using ClassHashMap = UnorderedMap<uint32, const RTTI *>;
/// Map of class names to type info
ClassNameMap mClassNameMap;
// Map of class hash to type info
ClassHashMap mClassHashMap;
};
JPH_NAMESPACE_END