From 79ec135af71b079ed4ac952a3b2c6370b4131184 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Leclercq?= Date: Sat, 30 Dec 2023 14:50:57 +0100 Subject: [PATCH] Optimize out a lot of std::string construction and allocations (#415) Update CommandLineParameters.hpp Update CommandLineParametersTests.cpp Update WebContext.hpp xmake check-files -f Fix MaterialPassRegistry --- include/Nazara/Core/CommandLineParameters.hpp | 13 ++++---- include/Nazara/Core/CommandLineParameters.inl | 6 ++-- include/Nazara/Core/ObjectLibrary.hpp | 14 ++++---- include/Nazara/Core/ObjectLibrary.inl | 14 ++++---- include/Nazara/Core/ParameterList.hpp | 25 +++++++------- include/Nazara/Core/ResourceSaver.hpp | 4 +-- include/Nazara/Core/ResourceSaver.inl | 2 +- .../Graphics/FramePipelinePassRegistry.hpp | 4 +-- .../Graphics/FramePipelinePassRegistry.inl | 4 +-- include/Nazara/Graphics/Material.hpp | 9 ++--- include/Nazara/Graphics/Material.inl | 4 +-- .../Nazara/Graphics/MaterialPassRegistry.hpp | 4 +-- .../Nazara/Graphics/MaterialPassRegistry.inl | 6 ++-- include/Nazara/Graphics/ShaderReflection.hpp | 19 ++++++----- include/Nazara/Graphics/ShaderReflection.inl | 4 +-- include/Nazara/Graphics/UberShader.hpp | 9 ++--- include/Nazara/Graphics/UberShader.inl | 2 +- .../Nazara/OpenGLRenderer/Wrapper/Context.hpp | 5 +-- .../Nazara/OpenGLRenderer/Wrapper/Context.inl | 4 +-- .../Wrapper/EGL/EGLContextBase.hpp | 5 +-- .../Wrapper/EGL/EGLContextBase.inl | 4 +-- .../OpenGLRenderer/Wrapper/WGL/WGLContext.hpp | 5 +-- .../OpenGLRenderer/Wrapper/WGL/WGLContext.inl | 2 +- .../OpenGLRenderer/Wrapper/Web/WebContext.hpp | 5 +-- .../OpenGLRenderer/Wrapper/Web/WebContext.inl | 4 +-- include/Nazara/Utility/Animation.hpp | 12 +++---- include/Nazara/Utility/Animation.inl | 1 - .../Nazara/Utility/Formats/MD5AnimParser.hpp | 4 +-- .../Nazara/Utility/Formats/MD5MeshParser.hpp | 4 +-- include/Nazara/Utility/Formats/MTLParser.hpp | 13 ++++---- include/Nazara/Utility/Formats/MTLParser.inl | 12 +++---- include/Nazara/Utility/Formats/OBJParser.hpp | 4 +-- include/Nazara/Utility/Formats/OBJParser.inl | 4 +-- include/Nazara/Utility/Image.hpp | 2 +- include/Nazara/Utility/Mesh.hpp | 14 ++++---- include/Nazara/Utility/Skeleton.hpp | 6 ++-- .../Nazara/VulkanRenderer/Wrapper/Device.hpp | 9 ++--- .../Nazara/VulkanRenderer/Wrapper/Device.inl | 4 +-- .../VulkanRenderer/Wrapper/Instance.hpp | 9 ++--- .../VulkanRenderer/Wrapper/Instance.inl | 4 +-- .../VulkanRenderer/Wrapper/PhysicalDevice.hpp | 3 +- plugins/Assimp/Plugin.cpp | 5 +-- src/Nazara/Core/ParameterList.cpp | 22 ++++++------- .../Formats/PipelinePassListLoader.cpp | 5 +-- src/Nazara/Graphics/ShaderReflection.cpp | 10 +++--- src/Nazara/Graphics/UberShader.cpp | 6 ++-- src/Nazara/Utility/Animation.cpp | 16 ++++----- src/Nazara/Utility/Formats/MD5AnimParser.cpp | 8 ++--- src/Nazara/Utility/Formats/MD5MeshParser.cpp | 6 ++-- src/Nazara/Utility/Formats/MTLParser.cpp | 2 +- src/Nazara/Utility/Formats/OBJSaver.cpp | 2 +- src/Nazara/Utility/Formats/STBSaver.cpp | 4 +-- src/Nazara/Utility/Image.cpp | 2 +- src/Nazara/Utility/Mesh.cpp | 33 +++++++++---------- src/Nazara/Utility/Skeleton.cpp | 14 ++++---- src/Nazara/VulkanRenderer/Vulkan.cpp | 11 ++++--- .../Core/CommandLineParametersTests.cpp | 1 + 57 files changed, 219 insertions(+), 210 deletions(-) diff --git a/include/Nazara/Core/CommandLineParameters.hpp b/include/Nazara/Core/CommandLineParameters.hpp index 9b8e55d84..77f108f2a 100644 --- a/include/Nazara/Core/CommandLineParameters.hpp +++ b/include/Nazara/Core/CommandLineParameters.hpp @@ -8,9 +8,8 @@ #define NAZARA_CORE_COMMANDLINEPARAMETERS_HPP #include -#include -#include -#include +#include +#include #include #include @@ -19,9 +18,9 @@ namespace Nz class CommandLineParameters { public: - inline bool GetParameter(const std::string& name, std::string_view* value) const; + inline bool GetParameter(std::string_view name, std::string_view* value) const; - inline bool HasFlag(const std::string& flag) const; + inline bool HasFlag(std::string_view flag) const; inline bool operator==(const CommandLineParameters& params) const; inline bool operator!=(const CommandLineParameters& params) const; @@ -30,8 +29,8 @@ namespace Nz static inline CommandLineParameters Parse(int argc, const Pointer* argv); private: - std::unordered_map m_parameters; - std::unordered_set m_flags; + std::unordered_map, std::equal_to<>> m_parameters; + std::unordered_set, std::equal_to<>> m_flags; }; } diff --git a/include/Nazara/Core/CommandLineParameters.inl b/include/Nazara/Core/CommandLineParameters.inl index ae29adf5e..a044a86b4 100644 --- a/include/Nazara/Core/CommandLineParameters.inl +++ b/include/Nazara/Core/CommandLineParameters.inl @@ -6,7 +6,7 @@ namespace Nz { - inline bool CommandLineParameters::GetParameter(const std::string& name, std::string_view* value) const + inline bool CommandLineParameters::GetParameter(std::string_view name, std::string_view* value) const { auto it = m_parameters.find(name); if (it == m_parameters.end()) @@ -18,9 +18,9 @@ namespace Nz return true; } - inline bool CommandLineParameters::HasFlag(const std::string& flag) const + inline bool CommandLineParameters::HasFlag(std::string_view flag) const { - return m_flags.find(flag) != m_flags.end(); + return m_flags.contains(flag); } inline bool CommandLineParameters::operator==(const CommandLineParameters& params) const diff --git a/include/Nazara/Core/ObjectLibrary.hpp b/include/Nazara/Core/ObjectLibrary.hpp index a78beac81..46c59a322 100644 --- a/include/Nazara/Core/ObjectLibrary.hpp +++ b/include/Nazara/Core/ObjectLibrary.hpp @@ -7,6 +7,8 @@ #ifndef NAZARA_CORE_OBJECTLIBRARY_HPP #define NAZARA_CORE_OBJECTLIBRARY_HPP +#include +#include #include #include #include @@ -24,15 +26,15 @@ namespace Nz void Clear(); - std::shared_ptr Get(const std::string& name); - bool Has(const std::string& name); + std::shared_ptr Get(std::string_view name); + bool Has(std::string_view name); - void Register(const std::string& name, std::shared_ptr object); - std::shared_ptr Query(const std::string& name); - void Unregister(const std::string& name); + void Register(std::string name, std::shared_ptr object); + std::shared_ptr Query(std::string_view name); + void Unregister(std::string_view name); private: - std::unordered_map> m_library; + std::unordered_map, StringHash<>, std::equal_to<>> m_library; }; } diff --git a/include/Nazara/Core/ObjectLibrary.inl b/include/Nazara/Core/ObjectLibrary.inl index c5b2c58e0..79f12cf64 100644 --- a/include/Nazara/Core/ObjectLibrary.inl +++ b/include/Nazara/Core/ObjectLibrary.inl @@ -31,7 +31,7 @@ namespace Nz * \remark Produces a NazaraError if object not found */ template - std::shared_ptr ObjectLibrary::Get(const std::string& name) + std::shared_ptr ObjectLibrary::Get(std::string_view name) { std::shared_ptr ref = Query(name); if (!ref) @@ -45,9 +45,9 @@ namespace Nz * \return true if it the case */ template - bool ObjectLibrary::Has(const std::string& name) + bool ObjectLibrary::Has(std::string_view name) { - return m_library.find(name) != m_library.end(); + return m_library.contains(name); } /*! @@ -57,9 +57,9 @@ namespace Nz * \param object Object to stock */ template - void ObjectLibrary::Register(const std::string& name, std::shared_ptr object) + void ObjectLibrary::Register(std::string name, std::shared_ptr object) { - m_library.emplace(name, object); + m_library.emplace(std::move(name), object); } /*! @@ -69,7 +69,7 @@ namespace Nz * \param name Name of the object */ template - std::shared_ptr ObjectLibrary::Query(const std::string& name) + std::shared_ptr ObjectLibrary::Query(std::string_view name) { auto it = m_library.find(name); if (it != m_library.end()) @@ -84,7 +84,7 @@ namespace Nz * \param name Name of the object */ template - void ObjectLibrary::Unregister(const std::string& name) + void ObjectLibrary::Unregister(std::string_view name) { m_library.erase(name); } diff --git a/include/Nazara/Core/ParameterList.hpp b/include/Nazara/Core/ParameterList.hpp index 25c275a5d..8193f296b 100644 --- a/include/Nazara/Core/ParameterList.hpp +++ b/include/Nazara/Core/ParameterList.hpp @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -33,19 +34,19 @@ namespace Nz inline void ForEach(const std::function& callback); inline void ForEach(const std::function& callback) const; - Result GetBooleanParameter(const std::string& name, bool strict = true) const; - Result GetColorParameter(const std::string& name, bool strict = true) const; - Result GetDoubleParameter(const std::string& name, bool strict = true) const; - Result GetIntegerParameter(const std::string& name, bool strict = true) const; - Result GetParameterType(const std::string& name) const; - Result GetPointerParameter(const std::string& name, bool strict = true) const; - Result GetStringParameter(const std::string& name, bool strict = true) const; - Result GetStringViewParameter(const std::string& name, bool strict = true) const; - Result GetUserdataParameter(const std::string& name, bool strict = true) const; + Result GetBooleanParameter(std::string_view name, bool strict = true) const; + Result GetColorParameter(std::string_view name, bool strict = true) const; + Result GetDoubleParameter(std::string_view name, bool strict = true) const; + Result GetIntegerParameter(std::string_view name, bool strict = true) const; + Result GetParameterType(std::string_view name) const; + Result GetPointerParameter(std::string_view name, bool strict = true) const; + Result GetStringParameter(std::string_view name, bool strict = true) const; + Result GetStringViewParameter(std::string_view name, bool strict = true) const; + Result GetUserdataParameter(std::string_view name, bool strict = true) const; - bool HasParameter(const std::string& name) const; + bool HasParameter(std::string_view name) const; - void RemoveParameter(const std::string& name); + void RemoveParameter(std::string_view name); void SetParameter(std::string name); void SetParameter(std::string name, const Color& value); @@ -111,7 +112,7 @@ namespace Nz Parameter& CreateValue(std::string&& name); void DestroyValue(Parameter& parameter); - using ParameterMap = std::unordered_map; + using ParameterMap = std::unordered_map, std::equal_to<>>; ParameterMap m_parameters; }; diff --git a/include/Nazara/Core/ResourceSaver.hpp b/include/Nazara/Core/ResourceSaver.hpp index abc912827..49316e155 100644 --- a/include/Nazara/Core/ResourceSaver.hpp +++ b/include/Nazara/Core/ResourceSaver.hpp @@ -31,7 +31,7 @@ namespace Nz struct Entry; using FormatSupport = std::function; using FileSaver = std::function; - using StreamSaver = std::function; + using StreamSaver = std::function; ResourceSaver() = default; ResourceSaver(const ResourceSaver&) = delete; @@ -43,7 +43,7 @@ namespace Nz bool IsExtensionSupported(std::string_view extension) const; bool SaveToFile(const Type& resource, const std::filesystem::path& filePath, const Parameters& parameters = Parameters()) const; - bool SaveToStream(const Type& resource, Stream& stream, const std::string& format, const Parameters& parameters = Parameters()) const; + bool SaveToStream(const Type& resource, Stream& stream, std::string_view format, const Parameters& parameters = Parameters()) const; const Entry* RegisterSaver(Entry saver); void UnregisterSaver(const Entry* saver); diff --git a/include/Nazara/Core/ResourceSaver.inl b/include/Nazara/Core/ResourceSaver.inl index 6938fbadf..25a277591 100644 --- a/include/Nazara/Core/ResourceSaver.inl +++ b/include/Nazara/Core/ResourceSaver.inl @@ -124,7 +124,7 @@ namespace Nz * \see SaveToFile */ template - bool ResourceSaver::SaveToStream(const Type& resource, Stream& stream, const std::string& format, const Parameters& parameters) const + bool ResourceSaver::SaveToStream(const Type& resource, Stream& stream, std::string_view format, const Parameters& parameters) const { NazaraAssert(stream.IsWritable(), "Stream is not writable"); NazaraAssert(parameters.IsValid(), "Invalid parameters"); diff --git a/include/Nazara/Graphics/FramePipelinePassRegistry.hpp b/include/Nazara/Graphics/FramePipelinePassRegistry.hpp index 177a67646..672844788 100644 --- a/include/Nazara/Graphics/FramePipelinePassRegistry.hpp +++ b/include/Nazara/Graphics/FramePipelinePassRegistry.hpp @@ -9,6 +9,7 @@ #include #include +#include #include #include #include @@ -51,8 +52,7 @@ namespace Nz std::vector outputs; }; - std::list m_passNames; //< in order to allow std::string_view as a key in C++17 (keep std::string stable as well because of SSO) - std::unordered_map m_passIndex; + std::unordered_map, std::equal_to<>> m_passIndex; std::vector m_passes; }; } diff --git a/include/Nazara/Graphics/FramePipelinePassRegistry.inl b/include/Nazara/Graphics/FramePipelinePassRegistry.inl index d5184e0d7..edd905589 100644 --- a/include/Nazara/Graphics/FramePipelinePassRegistry.inl +++ b/include/Nazara/Graphics/FramePipelinePassRegistry.inl @@ -58,10 +58,8 @@ namespace Nz if (m_passIndex.find(passName) != m_passIndex.end()) throw std::runtime_error("pass " + passName + " is already registered"); - m_passNames.push_back(std::move(passName)); - std::size_t passIndex = m_passIndex.size(); - m_passIndex.emplace(m_passNames.back(), passIndex); + m_passIndex.emplace(std::move(passName), passIndex); auto& passData = m_passes.emplace_back(); passData.factory = std::move(factory); passData.inputs = std::move(inputs); diff --git a/include/Nazara/Graphics/Material.hpp b/include/Nazara/Graphics/Material.hpp index 3c4fb34b4..ecc360c37 100644 --- a/include/Nazara/Graphics/Material.hpp +++ b/include/Nazara/Graphics/Material.hpp @@ -17,6 +17,7 @@ #include #include #include +#include #include #include #include @@ -51,8 +52,8 @@ namespace Nz std::shared_ptr GetDefaultInstance() const; - inline std::size_t FindTextureByTag(const std::string& tag) const; - inline std::size_t FindUniformBlockByTag(const std::string& tag) const; + inline std::size_t FindTextureByTag(std::string_view tag) const; + inline std::size_t FindUniformBlockByTag(std::string_view tag) const; inline UInt32 GetEngineBindingIndex(EngineShaderBinding shaderBinding) const; inline const std::shared_ptr& GetRenderPipelineLayout() const; @@ -93,8 +94,8 @@ namespace Nz private: std::shared_ptr m_renderPipelineLayout; std::unordered_map m_optionValues; - std::unordered_map m_textureByTag; - std::unordered_map m_uniformBlockByTag; + std::unordered_map, std::equal_to<>> m_textureByTag; + std::unordered_map, std::equal_to<>> m_uniformBlockByTag; std::vector m_textures; std::vector m_uniformBlocks; mutable std::weak_ptr m_defaultInstance; diff --git a/include/Nazara/Graphics/Material.inl b/include/Nazara/Graphics/Material.inl index e5cb9d420..a5c807897 100644 --- a/include/Nazara/Graphics/Material.inl +++ b/include/Nazara/Graphics/Material.inl @@ -6,7 +6,7 @@ namespace Nz { - inline std::size_t Material::FindTextureByTag(const std::string& tag) const + inline std::size_t Material::FindTextureByTag(std::string_view tag) const { auto it = m_textureByTag.find(tag); if (it == m_textureByTag.end()) @@ -15,7 +15,7 @@ namespace Nz return it->second; } - inline std::size_t Material::FindUniformBlockByTag(const std::string& tag) const + inline std::size_t Material::FindUniformBlockByTag(std::string_view tag) const { auto it = m_uniformBlockByTag.find(tag); if (it == m_uniformBlockByTag.end()) diff --git a/include/Nazara/Graphics/MaterialPassRegistry.hpp b/include/Nazara/Graphics/MaterialPassRegistry.hpp index 8e5548360..118b8b43d 100644 --- a/include/Nazara/Graphics/MaterialPassRegistry.hpp +++ b/include/Nazara/Graphics/MaterialPassRegistry.hpp @@ -8,6 +8,7 @@ #define NAZARA_GRAPHICS_MATERIALPASSREGISTRY_HPP #include +#include #include #include #include @@ -30,8 +31,7 @@ namespace Nz MaterialPassRegistry& operator=(MaterialPassRegistry&&) = default; private: - std::list m_passNames; //< in order to allow std::string_view as a key in C++17 (keep std::string stable as well because of SSO) - std::unordered_map m_passIndex; + std::unordered_map, std::equal_to<>> m_passIndex; }; } diff --git a/include/Nazara/Graphics/MaterialPassRegistry.inl b/include/Nazara/Graphics/MaterialPassRegistry.inl index e1051adbe..f72795ad2 100644 --- a/include/Nazara/Graphics/MaterialPassRegistry.inl +++ b/include/Nazara/Graphics/MaterialPassRegistry.inl @@ -18,13 +18,11 @@ namespace Nz inline std::size_t MaterialPassRegistry::RegisterPass(std::string passName) { - if (m_passIndex.find(passName) != m_passIndex.end()) + if (m_passIndex.contains(passName)) throw std::runtime_error("pass " + passName + " is already registered"); - m_passNames.push_back(std::move(passName)); - std::size_t passIndex = m_passIndex.size(); - m_passIndex.emplace(m_passNames.back(), passIndex); + m_passIndex.emplace(std::move(passName), passIndex); return passIndex; } diff --git a/include/Nazara/Graphics/ShaderReflection.hpp b/include/Nazara/Graphics/ShaderReflection.hpp index 6cfe8fda5..943562a1e 100644 --- a/include/Nazara/Graphics/ShaderReflection.hpp +++ b/include/Nazara/Graphics/ShaderReflection.hpp @@ -10,6 +10,7 @@ #include #include #include +#include #include #include #include @@ -31,8 +32,8 @@ namespace Nz ~ShaderReflection() = default; inline const RenderPipelineLayoutInfo& GetPipelineLayoutInfo() const; - inline const ExternalBlockData* GetExternalBlockByTag(const std::string& tag) const; - inline const OptionData* GetOptionByName(const std::string& optionName) const; + inline const ExternalBlockData* GetExternalBlockByTag(std::string_view tag) const; + inline const OptionData* GetOptionByName(std::string_view optionName) const; inline const StructData* GetStructByIndex(std::size_t structIndex) const; void Reflect(nzsl::Ast::Module& module); @@ -74,10 +75,10 @@ namespace Nz struct ExternalBlockData { - std::unordered_map samplers; - std::unordered_map storageBlocks; - std::unordered_map textures; - std::unordered_map uniformBlocks; + std::unordered_map, std::equal_to<>> samplers; + std::unordered_map, std::equal_to<>> storageBlocks; + std::unordered_map, std::equal_to<>> textures; + std::unordered_map, std::equal_to<>> uniformBlocks; }; struct OptionData @@ -97,7 +98,7 @@ namespace Nz { StructData(nzsl::StructLayout layout) : fieldOffsets(layout) {} - std::unordered_map members; + std::unordered_map, std::equal_to<>> members; nzsl::FieldOffsets fieldOffsets; }; @@ -107,8 +108,8 @@ namespace Nz void Visit(nzsl::Ast::DeclareOptionStatement& node) override; void Visit(nzsl::Ast::DeclareStructStatement& node) override; - std::unordered_map m_externalBlocks; - std::unordered_map m_options; + std::unordered_map, std::equal_to<>> m_externalBlocks; + std::unordered_map, std::equal_to<>> m_options; std::unordered_map m_structs; RenderPipelineLayoutInfo m_pipelineLayoutInfo; bool m_isConditional; diff --git a/include/Nazara/Graphics/ShaderReflection.inl b/include/Nazara/Graphics/ShaderReflection.inl index 24740174b..294d1a758 100644 --- a/include/Nazara/Graphics/ShaderReflection.inl +++ b/include/Nazara/Graphics/ShaderReflection.inl @@ -11,7 +11,7 @@ namespace Nz return m_pipelineLayoutInfo; } - inline auto ShaderReflection::GetExternalBlockByTag(const std::string& tag) const -> const ExternalBlockData* + inline auto ShaderReflection::GetExternalBlockByTag(std::string_view tag) const -> const ExternalBlockData* { auto it = m_externalBlocks.find(tag); if (it == m_externalBlocks.end()) @@ -20,7 +20,7 @@ namespace Nz return &it->second; } - inline auto ShaderReflection::GetOptionByName(const std::string& optionName) const -> const OptionData* + inline auto ShaderReflection::GetOptionByName(std::string_view optionName) const -> const OptionData* { auto it = m_options.find(optionName); if (it == m_options.end()) diff --git a/include/Nazara/Graphics/UberShader.hpp b/include/Nazara/Graphics/UberShader.hpp index efac922aa..5b293b8fb 100644 --- a/include/Nazara/Graphics/UberShader.hpp +++ b/include/Nazara/Graphics/UberShader.hpp @@ -12,6 +12,7 @@ #include #include #include +#include #include #include #include @@ -38,7 +39,7 @@ namespace Nz const std::shared_ptr& Get(const Config& config); - inline bool HasOption(const std::string& optionName, Pointer* option = nullptr) const; + inline bool HasOption(std::string_view optionName, Pointer* option = nullptr) const; inline void UpdateConfig(Config& config, const std::vector& vertexBuffers); inline void UpdateConfigCallback(ConfigCallback callback); @@ -66,13 +67,13 @@ namespace Nz NazaraSignal(OnShaderUpdated, UberShader* /*uberShader*/); private: - nzsl::Ast::ModulePtr Validate(const nzsl::Ast::Module& module, std::unordered_map* options); + nzsl::Ast::ModulePtr Validate(const nzsl::Ast::Module& module, std::unordered_map, std::equal_to<>>* options); NazaraSlot(nzsl::ModuleResolver, OnModuleUpdated, m_onShaderModuleUpdated); std::unordered_map, ConfigHasher, ConfigEqual> m_combinations; - std::unordered_map m_optionIndexByName; - std::unordered_set m_usedModules; + std::unordered_map, std::equal_to<>> m_optionIndexByName; + std::unordered_set, std::equal_to<>> m_usedModules; nzsl::Ast::ModulePtr m_shaderModule; ConfigCallback m_configCallback; nzsl::ShaderStageTypeFlags m_shaderStages; diff --git a/include/Nazara/Graphics/UberShader.inl b/include/Nazara/Graphics/UberShader.inl index d6caeb310..0357bb923 100644 --- a/include/Nazara/Graphics/UberShader.inl +++ b/include/Nazara/Graphics/UberShader.inl @@ -11,7 +11,7 @@ namespace Nz return m_shaderStages; } - inline bool UberShader::HasOption(const std::string& optionName, Pointer* option) const + inline bool UberShader::HasOption(std::string_view optionName, Pointer* option) const { auto it = m_optionIndexByName.find(optionName); if (it == m_optionIndexByName.end()) diff --git a/include/Nazara/OpenGLRenderer/Wrapper/Context.hpp b/include/Nazara/OpenGLRenderer/Wrapper/Context.hpp index 2ba4b04b9..8ee20e072 100644 --- a/include/Nazara/OpenGLRenderer/Wrapper/Context.hpp +++ b/include/Nazara/OpenGLRenderer/Wrapper/Context.hpp @@ -17,6 +17,7 @@ #include #include #include +#include #include #include #include @@ -163,7 +164,7 @@ namespace Nz::GL inline const OpenGLVaoCache& GetVaoCache() const; inline bool IsExtensionSupported(Extension extension) const; - inline bool IsExtensionSupported(const std::string& extension) const; + inline bool IsExtensionSupported(std::string_view extension) const; inline bool HasZeroToOneDepth() const; @@ -281,7 +282,7 @@ namespace Nz::GL EnumArray m_extensionStatus; std::array m_originalFunctionPointer; mutable std::unique_ptr m_blitFramebuffers; - std::unordered_set m_supportedExtensions; + std::unordered_set, std::equal_to<>> m_supportedExtensions; OpenGLVaoCache m_vaoCache; const OpenGLDevice* m_device; mutable State m_state; diff --git a/include/Nazara/OpenGLRenderer/Wrapper/Context.inl b/include/Nazara/OpenGLRenderer/Wrapper/Context.inl index 5c9cd8a89..101cf3b8c 100644 --- a/include/Nazara/OpenGLRenderer/Wrapper/Context.inl +++ b/include/Nazara/OpenGLRenderer/Wrapper/Context.inl @@ -107,9 +107,9 @@ namespace Nz::GL return GetExtensionStatus(extension) != ExtensionStatus::NotSupported; } - inline bool Context::IsExtensionSupported(const std::string& extension) const + inline bool Context::IsExtensionSupported(std::string_view extension) const { - return m_supportedExtensions.find(extension) != m_supportedExtensions.end(); + return m_supportedExtensions.contains(extension); } inline bool Context::HasZeroToOneDepth() const diff --git a/include/Nazara/OpenGLRenderer/Wrapper/EGL/EGLContextBase.hpp b/include/Nazara/OpenGLRenderer/Wrapper/EGL/EGLContextBase.hpp index 58745eae8..df139f5b9 100644 --- a/include/Nazara/OpenGLRenderer/Wrapper/EGL/EGLContextBase.hpp +++ b/include/Nazara/OpenGLRenderer/Wrapper/EGL/EGLContextBase.hpp @@ -12,6 +12,7 @@ #include #include #include +#include #include #include #include @@ -37,7 +38,7 @@ namespace Nz::GL PresentModeFlags GetSupportedPresentModes() const override; - inline bool HasPlatformExtension(const std::string& str) const; + inline bool HasPlatformExtension(std::string_view str) const; void SetPresentMode(PresentMode presentMode) override; @@ -72,7 +73,7 @@ namespace Nz::GL }; Fallback fallbacks; //< m_ omitted - std::unordered_set m_supportedPlatformExtensions; + std::unordered_set, std::equal_to<>> m_supportedPlatformExtensions; EGLContext m_handle; EGLint m_maxSwapInterval; EGLint m_minSwapInterval; diff --git a/include/Nazara/OpenGLRenderer/Wrapper/EGL/EGLContextBase.inl b/include/Nazara/OpenGLRenderer/Wrapper/EGL/EGLContextBase.inl index 4499ca18c..f48785264 100644 --- a/include/Nazara/OpenGLRenderer/Wrapper/EGL/EGLContextBase.inl +++ b/include/Nazara/OpenGLRenderer/Wrapper/EGL/EGLContextBase.inl @@ -16,9 +16,9 @@ namespace Nz::GL { } - inline bool EGLContextBase::HasPlatformExtension(const std::string& str) const + inline bool EGLContextBase::HasPlatformExtension(std::string_view str) const { - return m_supportedPlatformExtensions.find(str) != m_supportedPlatformExtensions.end(); + return m_supportedPlatformExtensions.contains(str); } } diff --git a/include/Nazara/OpenGLRenderer/Wrapper/WGL/WGLContext.hpp b/include/Nazara/OpenGLRenderer/Wrapper/WGL/WGLContext.hpp index c0f970fae..99f303395 100644 --- a/include/Nazara/OpenGLRenderer/Wrapper/WGL/WGLContext.hpp +++ b/include/Nazara/OpenGLRenderer/Wrapper/WGL/WGLContext.hpp @@ -14,6 +14,7 @@ #include #include #include +#include #include #include #include @@ -36,7 +37,7 @@ namespace Nz::GL PresentModeFlags GetSupportedPresentModes() const override; - inline bool HasPlatformExtension(const std::string& str) const; + inline bool HasPlatformExtension(std::string_view str) const; void SetPresentMode(PresentMode presentMode) override; @@ -73,7 +74,7 @@ namespace Nz::GL }; Fallback fallbacks; //< m_ omitted - std::unordered_set m_supportedPlatformExtensions; + std::unordered_set, std::equal_to<>> m_supportedPlatformExtensions; const WGLLoader& m_loader; HDC m_deviceContext; HGLRC m_handle; diff --git a/include/Nazara/OpenGLRenderer/Wrapper/WGL/WGLContext.inl b/include/Nazara/OpenGLRenderer/Wrapper/WGL/WGLContext.inl index 74e1d44df..4224ba3a7 100644 --- a/include/Nazara/OpenGLRenderer/Wrapper/WGL/WGLContext.inl +++ b/include/Nazara/OpenGLRenderer/Wrapper/WGL/WGLContext.inl @@ -13,7 +13,7 @@ namespace Nz::GL { } - inline bool WGLContext::HasPlatformExtension(const std::string& str) const + inline bool WGLContext::HasPlatformExtension(std::string_view str) const { return m_supportedPlatformExtensions.find(str) != m_supportedPlatformExtensions.end(); } diff --git a/include/Nazara/OpenGLRenderer/Wrapper/Web/WebContext.hpp b/include/Nazara/OpenGLRenderer/Wrapper/Web/WebContext.hpp index df9b236c9..dc545a8c9 100644 --- a/include/Nazara/OpenGLRenderer/Wrapper/Web/WebContext.hpp +++ b/include/Nazara/OpenGLRenderer/Wrapper/Web/WebContext.hpp @@ -12,6 +12,7 @@ #include #include #include +#include #include #include #include @@ -35,7 +36,7 @@ namespace Nz::GL PresentModeFlags GetSupportedPresentModes() const override; - inline bool HasPlatformExtension(const std::string& str) const; + inline bool HasPlatformExtension(std::string_view str) const; void SetPresentMode(PresentMode presentMode) override; @@ -66,7 +67,7 @@ namespace Nz::GL }; Fallback fallbacks; //< m_ omitted - std::unordered_set m_supportedPlatformExtensions; + std::unordered_set, std::equal_to<>> m_supportedPlatformExtensions; EMSCRIPTEN_WEBGL_CONTEXT_HANDLE m_handle; }; } diff --git a/include/Nazara/OpenGLRenderer/Wrapper/Web/WebContext.inl b/include/Nazara/OpenGLRenderer/Wrapper/Web/WebContext.inl index 0736714d1..ba04ff0c7 100644 --- a/include/Nazara/OpenGLRenderer/Wrapper/Web/WebContext.inl +++ b/include/Nazara/OpenGLRenderer/Wrapper/Web/WebContext.inl @@ -13,9 +13,9 @@ namespace Nz::GL { } - inline bool WebContext::HasPlatformExtension(const std::string& str) const + inline bool WebContext::HasPlatformExtension(std::string_view str) const { - return m_supportedPlatformExtensions.find(str) != m_supportedPlatformExtensions.end(); + return m_supportedPlatformExtensions.contains(str); } } diff --git a/include/Nazara/Utility/Animation.hpp b/include/Nazara/Utility/Animation.hpp index 20b58662c..3d1ef991b 100644 --- a/include/Nazara/Utility/Animation.hpp +++ b/include/Nazara/Utility/Animation.hpp @@ -64,7 +64,7 @@ namespace Nz Animation(Animation&&) noexcept; ~Animation(); - bool AddSequence(const Sequence& sequence); + bool AddSequence(Sequence sequence); void AnimateSkeleton(Skeleton* targetSkeleton, std::size_t frameA, std::size_t frameB, float interpolation) const; bool CreateSkeletal(std::size_t frameCount, std::size_t jointCount); @@ -74,23 +74,23 @@ namespace Nz std::size_t GetFrameCount() const; std::size_t GetJointCount() const; - Sequence* GetSequence(const std::string& sequenceName); + Sequence* GetSequence(std::string_view sequenceName); Sequence* GetSequence(std::size_t index); - const Sequence* GetSequence(const std::string& sequenceName) const; + const Sequence* GetSequence(std::string_view sequenceName) const; const Sequence* GetSequence(std::size_t index) const; std::size_t GetSequenceCount() const; - std::size_t GetSequenceIndex(const std::string& sequenceName) const; + std::size_t GetSequenceIndex(std::string_view sequenceName) const; SequenceJoint* GetSequenceJoints(std::size_t frameIndex = 0); const SequenceJoint* GetSequenceJoints(std::size_t frameIndex = 0) const; AnimationType GetType() const; - bool HasSequence(const std::string& sequenceName) const; + bool HasSequence(std::string_view sequenceName) const; bool HasSequence(std::size_t index = 0) const; bool IsLoopPointInterpolationEnabled() const; bool IsValid() const; - void RemoveSequence(const std::string& sequenceName); + void RemoveSequence(std::string_view sequenceName); void RemoveSequence(std::size_t index); Animation& operator=(const Animation&) = delete; diff --git a/include/Nazara/Utility/Animation.inl b/include/Nazara/Utility/Animation.inl index 4be719d65..a4a6cbe31 100644 --- a/include/Nazara/Utility/Animation.inl +++ b/include/Nazara/Utility/Animation.inl @@ -2,7 +2,6 @@ // This file is part of the "Nazara Engine - Utility module" // For conditions of distribution and use, see copyright notice in Config.hpp -#include #include namespace Nz diff --git a/include/Nazara/Utility/Formats/MD5AnimParser.hpp b/include/Nazara/Utility/Formats/MD5AnimParser.hpp index cb9e8bfec..befeda135 100644 --- a/include/Nazara/Utility/Formats/MD5AnimParser.hpp +++ b/include/Nazara/Utility/Formats/MD5AnimParser.hpp @@ -57,12 +57,12 @@ namespace Nz private: bool Advance(bool required = true); - void Error(const std::string& message); + void Error(std::string_view message); bool ParseBaseframe(); bool ParseBounds(); bool ParseFrame(); bool ParseHierarchy(); - void Warning(const std::string& message); + void Warning(std::string_view message); void UnrecognizedLine(bool error = false); std::vector m_animatedComponents; diff --git a/include/Nazara/Utility/Formats/MD5MeshParser.hpp b/include/Nazara/Utility/Formats/MD5MeshParser.hpp index 48850a3ef..a54924d7b 100644 --- a/include/Nazara/Utility/Formats/MD5MeshParser.hpp +++ b/include/Nazara/Utility/Formats/MD5MeshParser.hpp @@ -66,10 +66,10 @@ namespace Nz private: bool Advance(bool required = true); - void Error(const std::string& message); + void Error(std::string_view message); bool ParseJoints(); bool ParseMesh(); - void Warning(const std::string& message); + void Warning(std::string_view message); void UnrecognizedLine(bool error = false); std::vector m_joints; diff --git a/include/Nazara/Utility/Formats/MTLParser.hpp b/include/Nazara/Utility/Formats/MTLParser.hpp index deea65701..089b63a7d 100644 --- a/include/Nazara/Utility/Formats/MTLParser.hpp +++ b/include/Nazara/Utility/Formats/MTLParser.hpp @@ -10,6 +10,7 @@ #include #include #include +#include #include namespace Nz @@ -22,12 +23,12 @@ namespace Nz MTLParser() = default; ~MTLParser() = default; - inline Material* AddMaterial(const std::string& matName); + inline Material* AddMaterial(std::string matName); inline void Clear(); - inline const Material* GetMaterial(const std::string& materialName) const; - inline const std::unordered_map& GetMaterials() const; + inline const Material* GetMaterial(std::string_view materialName) const; + inline const std::unordered_map, std::equal_to<>>& GetMaterials() const; bool Parse(Stream& stream); @@ -60,12 +61,12 @@ namespace Nz template void Emit(const T& text) const; inline void EmitLine() const; template void EmitLine(const T& line) const; - inline void Error(const std::string& message); + inline void Error(std::string_view message); inline void Flush() const; - inline void Warning(const std::string& message); + inline void Warning(std::string_view message); inline void UnrecognizedLine(bool error = false); - std::unordered_map m_materials; + std::unordered_map, std::equal_to<>> m_materials; mutable Stream* m_currentStream; std::string m_currentLine; mutable std::ostringstream m_outputStream; diff --git a/include/Nazara/Utility/Formats/MTLParser.inl b/include/Nazara/Utility/Formats/MTLParser.inl index f0163149c..4a2290929 100644 --- a/include/Nazara/Utility/Formats/MTLParser.inl +++ b/include/Nazara/Utility/Formats/MTLParser.inl @@ -7,9 +7,9 @@ namespace Nz { - inline MTLParser::Material* MTLParser::AddMaterial(const std::string& matName) + inline MTLParser::Material* MTLParser::AddMaterial(std::string matName) { - return &m_materials[matName]; + return &m_materials[std::move(matName)]; } inline void MTLParser::Clear() @@ -17,7 +17,7 @@ namespace Nz m_materials.clear(); } - inline const MTLParser::Material* MTLParser::GetMaterial(const std::string& materialName) const + inline const MTLParser::Material* MTLParser::GetMaterial(std::string_view materialName) const { auto it = m_materials.find(materialName); if (it != m_materials.end()) @@ -26,7 +26,7 @@ namespace Nz return nullptr; } - inline const std::unordered_map& MTLParser::GetMaterials() const + inline auto MTLParser::GetMaterials() const -> const std::unordered_map, std::equal_to<>>& { return m_materials; } @@ -51,7 +51,7 @@ namespace Nz Emit('\n'); } - inline void MTLParser::Error(const std::string& message) + inline void MTLParser::Error(std::string_view message) { NazaraErrorFmt("{0} at line #{1}", message, m_lineCount); } @@ -62,7 +62,7 @@ namespace Nz m_outputStream.str({}); } - inline void MTLParser::Warning(const std::string& message) + inline void MTLParser::Warning(std::string_view message) { NazaraWarningFmt("{0} at line #{1}", message, m_lineCount); } diff --git a/include/Nazara/Utility/Formats/OBJParser.hpp b/include/Nazara/Utility/Formats/OBJParser.hpp index a547632a3..6ccfa9cef 100644 --- a/include/Nazara/Utility/Formats/OBJParser.hpp +++ b/include/Nazara/Utility/Formats/OBJParser.hpp @@ -81,9 +81,9 @@ namespace Nz template void Emit(const T& text) const; inline void EmitLine() const; template void EmitLine(const T& line) const; - inline void Error(const std::string& message); + inline void Error(std::string_view message); inline void Flush() const; - inline void Warning(const std::string& message); + inline void Warning(std::string_view message); inline bool UnrecognizedLine(bool error = false); std::vector m_meshes; diff --git a/include/Nazara/Utility/Formats/OBJParser.inl b/include/Nazara/Utility/Formats/OBJParser.inl index 04f38babb..9d586bd56 100644 --- a/include/Nazara/Utility/Formats/OBJParser.inl +++ b/include/Nazara/Utility/Formats/OBJParser.inl @@ -151,7 +151,7 @@ namespace Nz Emit('\n'); } - inline void OBJParser::Error(const std::string& message) + inline void OBJParser::Error(std::string_view message) { NazaraErrorFmt("{0} on line #{1}", message, m_lineCount); } @@ -162,7 +162,7 @@ namespace Nz m_outputStream.str({}); } - inline void OBJParser::Warning(const std::string& message) + inline void OBJParser::Warning(std::string_view message) { NazaraWarningFmt("{0} on line #{1}", message, m_lineCount); } diff --git a/include/Nazara/Utility/Image.hpp b/include/Nazara/Utility/Image.hpp index 0efe9206e..f8b454912 100644 --- a/include/Nazara/Utility/Image.hpp +++ b/include/Nazara/Utility/Image.hpp @@ -97,7 +97,7 @@ namespace Nz // Save bool SaveToFile(const std::filesystem::path& filePath, const ImageParams& params = ImageParams()); - bool SaveToStream(Stream& stream, const std::string& format, const ImageParams& params = ImageParams()); + bool SaveToStream(Stream& stream, std::string_view format, const ImageParams& params = ImageParams()); //TODO: SaveArray, SaveCubemap, SaveFace diff --git a/include/Nazara/Utility/Mesh.hpp b/include/Nazara/Utility/Mesh.hpp index 79d9d0938..a7c1a09b1 100644 --- a/include/Nazara/Utility/Mesh.hpp +++ b/include/Nazara/Utility/Mesh.hpp @@ -101,7 +101,7 @@ namespace Nz ~Mesh() = default; void AddSubMesh(std::shared_ptr subMesh); - void AddSubMesh(const std::string& identifier, std::shared_ptr subMesh); + void AddSubMesh(std::string identifier, std::shared_ptr subMesh); std::shared_ptr BuildSubMesh(const Primitive& primitive, const MeshParams& params = MeshParams()); void BuildSubMeshes(const PrimitiveList& primitiveList, const MeshParams& params = MeshParams()); @@ -123,14 +123,14 @@ namespace Nz std::size_t GetMaterialCount() const; Skeleton* GetSkeleton(); const Skeleton* GetSkeleton() const; - const std::shared_ptr& GetSubMesh(const std::string& identifier) const; + const std::shared_ptr& GetSubMesh(std::string_view identifier) const; const std::shared_ptr& GetSubMesh(std::size_t index) const; std::size_t GetSubMeshCount() const; - std::size_t GetSubMeshIndex(const std::string& identifier) const; + std::size_t GetSubMeshIndex(std::string_view identifier) const; UInt32 GetTriangleCount() const; UInt32 GetVertexCount() const; - bool HasSubMesh(const std::string& identifier) const; + bool HasSubMesh(std::string_view identifier) const; bool HasSubMesh(std::size_t index = 0) const; void InvalidateAABB() const; @@ -140,11 +140,11 @@ namespace Nz void Recenter(); - void RemoveSubMesh(const std::string& identifier); + void RemoveSubMesh(std::string_view identifier); void RemoveSubMesh(std::size_t index); bool SaveToFile(const std::filesystem::path& filePath, const MeshParams& params = MeshParams()); - bool SaveToStream(Stream& stream, const std::string& format, const MeshParams& params = MeshParams()); + bool SaveToStream(Stream& stream, std::string_view format, const MeshParams& params = MeshParams()); void SetAnimation(const std::filesystem::path& animationPath); void SetMaterialCount(std::size_t matCount); @@ -175,7 +175,7 @@ namespace Nz }; std::size_t m_jointCount; // Only used by skeletal meshes - std::unordered_map m_subMeshMap; + std::unordered_map, std::equal_to<>> m_subMeshMap; std::vector m_materialData; std::vector m_subMeshes; AnimationType m_animationType; diff --git a/include/Nazara/Utility/Skeleton.hpp b/include/Nazara/Utility/Skeleton.hpp index 584f3692a..2617252aa 100644 --- a/include/Nazara/Utility/Skeleton.hpp +++ b/include/Nazara/Utility/Skeleton.hpp @@ -37,14 +37,14 @@ namespace Nz void Destroy(); const Boxf& GetAABB() const; - Joint* GetJoint(const std::string& jointName); + Joint* GetJoint(std::string_view jointName); Joint* GetJoint(std::size_t index); - const Joint* GetJoint(const std::string& jointName) const; + const Joint* GetJoint(std::string_view jointName) const; const Joint* GetJoint(std::size_t index) const; Joint* GetJoints(); const Joint* GetJoints() const; std::size_t GetJointCount() const; - std::size_t GetJointIndex(const std::string& jointName) const; + std::size_t GetJointIndex(std::string_view jointName) const; Joint* GetRootJoint(); const Joint* GetRootJoint() const; diff --git a/include/Nazara/VulkanRenderer/Wrapper/Device.hpp b/include/Nazara/VulkanRenderer/Wrapper/Device.hpp index 65823f489..20c7a4d44 100644 --- a/include/Nazara/VulkanRenderer/Wrapper/Device.hpp +++ b/include/Nazara/VulkanRenderer/Wrapper/Device.hpp @@ -14,6 +14,7 @@ #include #include #include +#include #include #include #include @@ -62,8 +63,8 @@ namespace Nz inline PFN_vkVoidFunction GetProcAddr(const char* name, bool allowInstanceFallback); QueueHandle GetQueue(UInt32 queueFamilyIndex, UInt32 queueIndex); - inline bool IsExtensionLoaded(const std::string& extensionName); - inline bool IsLayerLoaded(const std::string& layerName); + inline bool IsExtensionLoaded(std::string_view extensionName); + inline bool IsLayerLoaded(std::string_view layerName); inline void SetDebugName(VkObjectType objectType, UInt64 objectHandle, const char* name); inline void SetDebugName(VkObjectType objectType, UInt64 objectHandle, std::string_view name); @@ -107,8 +108,8 @@ namespace Nz struct InternalData; std::unique_ptr m_internalData; - std::unordered_set m_loadedExtensions; - std::unordered_set m_loadedLayers; + std::unordered_set, std::equal_to<>> m_loadedExtensions; + std::unordered_set, std::equal_to<>> m_loadedLayers; std::vector m_enabledQueuesInfos; std::vector m_queuesByFamily; Instance& m_instance; diff --git a/include/Nazara/VulkanRenderer/Wrapper/Device.inl b/include/Nazara/VulkanRenderer/Wrapper/Device.inl index b164498a4..adc146c89 100644 --- a/include/Nazara/VulkanRenderer/Wrapper/Device.inl +++ b/include/Nazara/VulkanRenderer/Wrapper/Device.inl @@ -77,12 +77,12 @@ namespace Nz::Vk return func; } - inline bool Device::IsExtensionLoaded(const std::string& extensionName) + inline bool Device::IsExtensionLoaded(std::string_view extensionName) { return m_loadedExtensions.count(extensionName) > 0; } - inline bool Device::IsLayerLoaded(const std::string& layerName) + inline bool Device::IsLayerLoaded(std::string_view layerName) { return m_loadedLayers.count(layerName) > 0; } diff --git a/include/Nazara/VulkanRenderer/Wrapper/Instance.hpp b/include/Nazara/VulkanRenderer/Wrapper/Instance.hpp index 5cf3ac157..d0098a34c 100644 --- a/include/Nazara/VulkanRenderer/Wrapper/Instance.hpp +++ b/include/Nazara/VulkanRenderer/Wrapper/Instance.hpp @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -88,8 +89,8 @@ namespace Nz::Vk void InstallDebugMessageCallback(RenderAPIValidationLevel validationLevel); - inline bool IsExtensionLoaded(const std::string& extensionName) const; - inline bool IsLayerLoaded(const std::string& layerName) const; + inline bool IsExtensionLoaded(std::string_view extensionName) const; + inline bool IsLayerLoaded(std::string_view layerName) const; inline bool IsValid() const; Instance& operator=(const Instance&) = delete; @@ -110,8 +111,8 @@ namespace Nz::Vk struct InternalData; std::unique_ptr m_internalData; - std::unordered_set m_loadedExtensions; - std::unordered_set m_loadedLayers; + std::unordered_set, std::equal_to<>> m_loadedExtensions; + std::unordered_set, std::equal_to<>> m_loadedLayers; VkAllocationCallbacks m_allocator; VkInstance m_instance; mutable VkResult m_lastErrorCode; diff --git a/include/Nazara/VulkanRenderer/Wrapper/Instance.inl b/include/Nazara/VulkanRenderer/Wrapper/Instance.inl index 91dab37bb..1cfc03a9f 100644 --- a/include/Nazara/VulkanRenderer/Wrapper/Instance.inl +++ b/include/Nazara/VulkanRenderer/Wrapper/Instance.inl @@ -79,12 +79,12 @@ namespace Nz::Vk return m_validationLevel; } - inline bool Instance::IsExtensionLoaded(const std::string& extensionName) const + inline bool Instance::IsExtensionLoaded(std::string_view extensionName) const { return m_loadedExtensions.count(extensionName) > 0; } - inline bool Instance::IsLayerLoaded(const std::string& layerName) const + inline bool Instance::IsLayerLoaded(std::string_view layerName) const { return m_loadedLayers.count(layerName) > 0; } diff --git a/include/Nazara/VulkanRenderer/Wrapper/PhysicalDevice.hpp b/include/Nazara/VulkanRenderer/Wrapper/PhysicalDevice.hpp index ccf931f23..3e9732500 100644 --- a/include/Nazara/VulkanRenderer/Wrapper/PhysicalDevice.hpp +++ b/include/Nazara/VulkanRenderer/Wrapper/PhysicalDevice.hpp @@ -7,6 +7,7 @@ #ifndef NAZARA_VULKANRENDERER_WRAPPER_PHYSICALDEVICE_HPP #define NAZARA_VULKANRENDERER_WRAPPER_PHYSICALDEVICE_HPP +#include #include #include #include @@ -20,7 +21,7 @@ namespace Nz::Vk VkPhysicalDeviceFeatures features; VkPhysicalDeviceMemoryProperties memoryProperties; VkPhysicalDeviceProperties properties; - std::unordered_set extensions; + std::unordered_set, std::equal_to<>> extensions; std::vector queueFamilies; }; } diff --git a/plugins/Assimp/Plugin.cpp b/plugins/Assimp/Plugin.cpp index 0213a2e9e..104a103fc 100644 --- a/plugins/Assimp/Plugin.cpp +++ b/plugins/Assimp/Plugin.cpp @@ -25,6 +25,7 @@ SOFTWARE. #include #include #include +#include #include #include #include @@ -84,7 +85,7 @@ struct SceneInfo { const aiMesh* mesh; std::size_t nodeIndex; - std::unordered_map bones; + std::unordered_map, std::equal_to<>> bones; }; struct StaticMesh @@ -95,7 +96,7 @@ struct SceneInfo std::size_t skeletonRootIndex; std::unordered_map assimpBoneToJointIndex; - std::unordered_multimap nodeByName; + std::unordered_multimap, std::equal_to<>> nodeByName; std::vector nodes; std::vector skeletalMeshes; std::vector staticMeshes; diff --git a/src/Nazara/Core/ParameterList.cpp b/src/Nazara/Core/ParameterList.cpp index ea17e324d..946f972d0 100644 --- a/src/Nazara/Core/ParameterList.cpp +++ b/src/Nazara/Core/ParameterList.cpp @@ -55,7 +55,7 @@ namespace Nz Integer: 0 is interpreted as false, any other value is interpreted as true std::string: Conversion obeys the rule as described by std::string::ToBool */ - auto ParameterList::GetBooleanParameter(const std::string& name, bool strict) const -> Result + auto ParameterList::GetBooleanParameter(std::string_view name, bool strict) const -> Result { auto it = m_parameters.find(name); if (it == m_parameters.end()) @@ -105,7 +105,7 @@ namespace Nz * * \remark If the parameter is not a color, the function fails */ - auto ParameterList::GetColorParameter(const std::string& name, bool /*strict*/) const -> Result + auto ParameterList::GetColorParameter(std::string_view name, bool /*strict*/) const -> Result { auto it = m_parameters.find(name); if (it == m_parameters.end()) @@ -140,7 +140,7 @@ namespace Nz Integer: The integer value is converted to its double representation std::string: Conversion obeys the rule as described by std::string::ToDouble */ - auto ParameterList::GetDoubleParameter(const std::string& name, bool strict) const -> Result + auto ParameterList::GetDoubleParameter(std::string_view name, bool strict) const -> Result { auto it = m_parameters.find(name); if (it == m_parameters.end()) @@ -199,7 +199,7 @@ namespace Nz Double: The floating-point value is truncated and converted to a integer std::string: Conversion obeys the rule as described by std::string::ToInteger */ - auto ParameterList::GetIntegerParameter(const std::string& name, bool strict) const -> Result + auto ParameterList::GetIntegerParameter(std::string_view name, bool strict) const -> Result { auto it = m_parameters.find(name); if (it == m_parameters.end()) @@ -259,7 +259,7 @@ namespace Nz * * \remark type must be a valid pointer to a ParameterType variable */ - auto ParameterList::GetParameterType(const std::string& name) const -> Result + auto ParameterList::GetParameterType(std::string_view name) const -> Result { auto it = m_parameters.find(name); if (it == m_parameters.end()) @@ -278,7 +278,7 @@ namespace Nz * \remark If the parameter is not a pointer, a conversion may be performed if strict parameter is set to false, compatibles types are: Userdata: The pointer part of the userdata is returned */ - auto ParameterList::GetPointerParameter(const std::string& name, bool strict) const -> Result + auto ParameterList::GetPointerParameter(std::string_view name, bool strict) const -> Result { auto it = m_parameters.find(name); if (it == m_parameters.end()) @@ -323,7 +323,7 @@ namespace Nz Pointer: Conversion obeys the rules of PointerToString Userdata: Conversion obeys the rules of PointerToString */ - auto ParameterList::GetStringParameter(const std::string& name, bool strict) const -> Result + auto ParameterList::GetStringParameter(std::string_view name, bool strict) const -> Result { auto it = m_parameters.find(name); if (it == m_parameters.end()) @@ -391,7 +391,7 @@ namespace Nz Boolean: A string view containing true or false None: An empty string view is returned */ - auto ParameterList::GetStringViewParameter(const std::string& name, bool strict) const -> Result + auto ParameterList::GetStringViewParameter(std::string_view name, bool strict) const -> Result { auto it = m_parameters.find(name); if (it == m_parameters.end()) @@ -436,7 +436,7 @@ namespace Nz * * \see GetPointerParameter */ - auto ParameterList::GetUserdataParameter(const std::string& name, bool /*strict*/) const -> Result + auto ParameterList::GetUserdataParameter(std::string_view name, bool /*strict*/) const -> Result { auto it = m_parameters.find(name); if (it == m_parameters.end()) @@ -456,7 +456,7 @@ namespace Nz * * \param name Name of the parameter */ - bool ParameterList::HasParameter(const std::string& name) const + bool ParameterList::HasParameter(std::string_view name) const { return m_parameters.find(name) != m_parameters.end(); } @@ -469,7 +469,7 @@ namespace Nz * * \param name Name of the parameter */ - void ParameterList::RemoveParameter(const std::string& name) + void ParameterList::RemoveParameter(std::string_view name) { auto it = m_parameters.find(name); if (it != m_parameters.end()) diff --git a/src/Nazara/Graphics/Formats/PipelinePassListLoader.cpp b/src/Nazara/Graphics/Formats/PipelinePassListLoader.cpp index 70fdbed04..341412c20 100644 --- a/src/Nazara/Graphics/Formats/PipelinePassListLoader.cpp +++ b/src/Nazara/Graphics/Formats/PipelinePassListLoader.cpp @@ -5,6 +5,7 @@ #include #include #include +#include #include #include @@ -183,7 +184,7 @@ namespace Nz::Loaders throw ResourceLoadingError::DecodingError; } - std::size_t passId = m_current->passList->AddPass(passName, implIndex, std::move(implConfig)); + std::size_t passId = m_current->passList->AddPass(std::move(passName), implIndex, std::move(implConfig)); for (auto&& [inputName, attachmentName] : inputs) { @@ -262,7 +263,7 @@ namespace Nz::Loaders struct CurrentPassList { std::shared_ptr passList; - std::unordered_map attachmentsByName; + std::unordered_map, std::equal_to<>> attachmentsByName; }; std::optional m_current; diff --git a/src/Nazara/Graphics/ShaderReflection.cpp b/src/Nazara/Graphics/ShaderReflection.cpp index d9d6540fb..decbf10c9 100644 --- a/src/Nazara/Graphics/ShaderReflection.cpp +++ b/src/Nazara/Graphics/ShaderReflection.cpp @@ -35,7 +35,7 @@ namespace Nz ExternalBlockData* externalBlock = nullptr; if (!node.tag.empty()) { - if (m_externalBlocks.find(node.tag) != m_externalBlocks.end()) + if (m_externalBlocks.contains(node.tag)) throw std::runtime_error("duplicate tag " + node.tag); externalBlock = &m_externalBlocks[node.tag]; @@ -90,7 +90,7 @@ namespace Nz { case ShaderBindingType::Sampler: { - if (externalBlock->samplers.find(externalVar.tag) != externalBlock->samplers.end()) + if (externalBlock->samplers.contains(externalVar.tag)) throw std::runtime_error("duplicate sampler tag " + externalVar.tag + " in external block " + node.tag); const auto& samplerType = std::get(*varType); @@ -105,7 +105,7 @@ namespace Nz case ShaderBindingType::StorageBuffer: { - if (externalBlock->storageBlocks.find(externalVar.tag) != externalBlock->storageBlocks.end()) + if (externalBlock->storageBlocks.contains(externalVar.tag)) throw std::runtime_error("duplicate storage buffer tag " + externalVar.tag + " in external block " + node.tag); ExternalStorageBlock& storageBuffer = externalBlock->storageBlocks[externalVar.tag]; @@ -117,7 +117,7 @@ namespace Nz case ShaderBindingType::Texture: { - if (externalBlock->textures.find(externalVar.tag) != externalBlock->textures.end()) + if (externalBlock->textures.contains(externalVar.tag)) throw std::runtime_error("duplicate textures tag " + externalVar.tag + " in external block " + node.tag); const auto& textureType = std::get(*varType); @@ -134,7 +134,7 @@ namespace Nz case ShaderBindingType::UniformBuffer: { - if (externalBlock->uniformBlocks.find(externalVar.tag) != externalBlock->uniformBlocks.end()) + if (externalBlock->uniformBlocks.contains(externalVar.tag)) throw std::runtime_error("duplicate storage buffer tag " + externalVar.tag + " in external block " + node.tag); ExternalUniformBlock& uniformBuffer = externalBlock->uniformBlocks[externalVar.tag]; diff --git a/src/Nazara/Graphics/UberShader.cpp b/src/Nazara/Graphics/UberShader.cpp index 64a377342..22646e191 100644 --- a/src/Nazara/Graphics/UberShader.cpp +++ b/src/Nazara/Graphics/UberShader.cpp @@ -38,7 +38,7 @@ namespace Nz m_onShaderModuleUpdated.Connect(moduleResolver.OnModuleUpdated, [this, name = std::move(moduleName)](nzsl::ModuleResolver* resolver, const std::string& updatedModuleName) { - if (m_usedModules.find(updatedModuleName) == m_usedModules.end()) + if (!m_usedModules.contains(updatedModuleName)) return; nzsl::Ast::ModulePtr newShaderModule = resolver->Resolve(name); @@ -108,7 +108,7 @@ namespace Nz return it->second; } - nzsl::Ast::ModulePtr UberShader::Validate(const nzsl::Ast::Module& module, std::unordered_map* options) + nzsl::Ast::ModulePtr UberShader::Validate(const nzsl::Ast::Module& module, std::unordered_map, std::equal_to<>>* options) { NazaraAssert(m_shaderStages != 0, "there must be at least one shader stage"); assert(options); @@ -132,7 +132,7 @@ namespace Nz supportedStageType |= stageType; }; - std::unordered_map optionByName; + std::unordered_map, std::equal_to<>> optionByName; callbacks.onOptionDeclaration = [&](const nzsl::Ast::DeclareOptionStatement& option) { //TODO: Check optionType diff --git a/src/Nazara/Utility/Animation.cpp b/src/Nazara/Utility/Animation.cpp index b7c76dae3..478419c53 100644 --- a/src/Nazara/Utility/Animation.cpp +++ b/src/Nazara/Utility/Animation.cpp @@ -17,7 +17,7 @@ namespace Nz { struct AnimationImpl { - std::unordered_map sequenceMap; + std::unordered_map, std::equal_to<>> sequenceMap; std::vector sequences; std::vector sequenceJoints; // Uniquement pour les animations squelettiques AnimationType type; @@ -47,7 +47,7 @@ namespace Nz Animation::Animation(Animation&&) noexcept = default; Animation::~Animation() = default; - bool Animation::AddSequence(const Sequence& sequence) + bool Animation::AddSequence(Sequence sequence) { NazaraAssert(m_impl, "Animation not created"); NazaraAssert(sequence.frameCount > 0, "Sequence frame count must be over zero"); @@ -76,7 +76,7 @@ namespace Nz m_impl->sequenceMap[sequence.name] = static_cast(m_impl->sequences.size()); } - m_impl->sequences.push_back(sequence); + m_impl->sequences.emplace_back(std::move(sequence)); return true; } @@ -145,7 +145,7 @@ namespace Nz return m_impl->jointCount; } - Sequence* Animation::GetSequence(const std::string& sequenceName) + Sequence* Animation::GetSequence(std::string_view sequenceName) { NazaraAssert(m_impl, "Animation not created"); @@ -167,7 +167,7 @@ namespace Nz return &m_impl->sequences[index]; } - const Sequence* Animation::GetSequence(const std::string& sequenceName) const + const Sequence* Animation::GetSequence(std::string_view sequenceName) const { NazaraAssert(m_impl, "Animation not created"); @@ -196,7 +196,7 @@ namespace Nz return static_cast(m_impl->sequences.size()); } - std::size_t Animation::GetSequenceIndex(const std::string& sequenceName) const + std::size_t Animation::GetSequenceIndex(std::string_view sequenceName) const { NazaraAssert(m_impl, "Animation not created"); @@ -233,7 +233,7 @@ namespace Nz return m_impl->type; } - bool Animation::HasSequence(const std::string& sequenceName) const + bool Animation::HasSequence(std::string_view sequenceName) const { NazaraAssert(m_impl, "Animation not created"); @@ -259,7 +259,7 @@ namespace Nz return m_impl != nullptr; } - void Animation::RemoveSequence(const std::string& identifier) + void Animation::RemoveSequence(std::string_view identifier) { NazaraAssert(m_impl, "Animation not created"); diff --git a/src/Nazara/Utility/Formats/MD5AnimParser.cpp b/src/Nazara/Utility/Formats/MD5AnimParser.cpp index 26381059e..959160243 100644 --- a/src/Nazara/Utility/Formats/MD5AnimParser.cpp +++ b/src/Nazara/Utility/Formats/MD5AnimParser.cpp @@ -262,7 +262,7 @@ namespace Nz return true; } - void MD5AnimParser::Error(const std::string& message) + void MD5AnimParser::Error(std::string_view message) { NazaraErrorFmt("{0} at line #{1}", message, m_lineCount); } @@ -504,14 +504,14 @@ namespace Nz return true; } - void MD5AnimParser::Warning(const std::string& message) + void MD5AnimParser::Warning(std::string_view message) { - NazaraWarning(message + " at line #" + NumberToString(m_lineCount)); + NazaraWarningFmt("{0} at line #{1}", message, m_lineCount); } void MD5AnimParser::UnrecognizedLine(bool error) { - std::string message = "Unrecognized \"" + m_currentLine + '"'; + std::string message = "unrecognized \"" + m_currentLine + '"'; if (error) Error(message); diff --git a/src/Nazara/Utility/Formats/MD5MeshParser.cpp b/src/Nazara/Utility/Formats/MD5MeshParser.cpp index 837b2f732..0d17a69f0 100644 --- a/src/Nazara/Utility/Formats/MD5MeshParser.cpp +++ b/src/Nazara/Utility/Formats/MD5MeshParser.cpp @@ -209,7 +209,7 @@ namespace Nz return true; } - void MD5MeshParser::Error(const std::string& message) + void MD5MeshParser::Error(std::string_view message) { NazaraErrorFmt("{0} on line #{1}", message, m_lineCount); } @@ -444,14 +444,14 @@ namespace Nz return true; } - void MD5MeshParser::Warning(const std::string& message) + void MD5MeshParser::Warning(std::string_view message) { NazaraWarningFmt("{0} on line #{1}", message, m_lineCount); } void MD5MeshParser::UnrecognizedLine(bool error) { - std::string message = "Unrecognized \"" + m_currentLine + '"'; + std::string message = "unrecognized \"" + m_currentLine + '"'; if (error) Error(message); diff --git a/src/Nazara/Utility/Formats/MTLParser.cpp b/src/Nazara/Utility/Formats/MTLParser.cpp index ac2d14ee0..338aad6fc 100644 --- a/src/Nazara/Utility/Formats/MTLParser.cpp +++ b/src/Nazara/Utility/Formats/MTLParser.cpp @@ -14,7 +14,7 @@ namespace Nz namespace { template - bool TestKeyword(const std::string& currentLine, const char(&keyword)[N], std::size_t& offset) + bool TestKeyword(std::string_view currentLine, const char(&keyword)[N], std::size_t& offset) { if (currentLine.size() > N && StartsWith(currentLine, keyword, CaseIndependent{}) && std::isspace(currentLine[N - 1])) { diff --git a/src/Nazara/Utility/Formats/OBJSaver.cpp b/src/Nazara/Utility/Formats/OBJSaver.cpp index dfa553b1e..b2ce63052 100644 --- a/src/Nazara/Utility/Formats/OBJSaver.cpp +++ b/src/Nazara/Utility/Formats/OBJSaver.cpp @@ -57,7 +57,7 @@ namespace Nz return (extension == ".obj"); } - bool SaveOBJToStream(const Mesh& mesh, const std::string& format, Stream& stream, const MeshParams& parameters) + bool SaveOBJToStream(const Mesh& mesh, std::string_view format, Stream& stream, const MeshParams& parameters) { NAZARA_USE_ANONYMOUS_NAMESPACE diff --git a/src/Nazara/Utility/Formats/STBSaver.cpp b/src/Nazara/Utility/Formats/STBSaver.cpp index f7fcfa72c..78c54a63f 100644 --- a/src/Nazara/Utility/Formats/STBSaver.cpp +++ b/src/Nazara/Utility/Formats/STBSaver.cpp @@ -235,7 +235,7 @@ namespace Nz return s_formatHandlers.find(extension) != s_formatHandlers.end(); } - bool SaveToStream(const Image& image, const std::string& format, Stream& stream, const ImageParams& parameters) + bool SaveToStream(const Image& image, std::string_view format, Stream& stream, const ImageParams& parameters) { NazaraUnused(parameters); @@ -252,7 +252,7 @@ namespace Nz return false; } - auto it = s_formatHandlers.find(std::string_view(format)); + auto it = s_formatHandlers.find(format); NazaraAssert(it != s_formatHandlers.end(), "Invalid handler"); const FormatHandler& handler = it->second; diff --git a/src/Nazara/Utility/Image.cpp b/src/Nazara/Utility/Image.cpp index b2c6a9ed8..2c103f665 100644 --- a/src/Nazara/Utility/Image.cpp +++ b/src/Nazara/Utility/Image.cpp @@ -1146,7 +1146,7 @@ namespace Nz return utility->GetImageSaver().SaveToFile(*this, filePath, params); } - bool Image::SaveToStream(Stream& stream, const std::string& format, const ImageParams& params) + bool Image::SaveToStream(Stream& stream, std::string_view format, const ImageParams& params) { Utility* utility = Utility::Instance(); NazaraAssert(utility, "Utility module has not been initialized"); diff --git a/src/Nazara/Utility/Mesh.cpp b/src/Nazara/Utility/Mesh.cpp index 549ccc588..0f59236d5 100644 --- a/src/Nazara/Utility/Mesh.cpp +++ b/src/Nazara/Utility/Mesh.cpp @@ -55,19 +55,18 @@ namespace Nz InvalidateAABB(); } - void Mesh::AddSubMesh(const std::string& identifier, std::shared_ptr subMesh) + void Mesh::AddSubMesh(std::string identifier, std::shared_ptr subMesh) { NazaraAssert(m_isValid, "Mesh should be created first"); - NazaraAssert(!identifier.empty(), "Identifier is empty"); - NazaraAssert(m_subMeshMap.find(identifier) == m_subMeshMap.end(), "SubMesh identifier \"" + identifier + "\" is already in use"); - NazaraAssert(subMesh, "Invalid submesh"); + NazaraAssert(!identifier.empty(), "empty identifier"); + NazaraAssertFmt(!m_subMeshMap.contains(identifier), "SubMesh identifier \"{0}\" is already in use", identifier); + NazaraAssert(subMesh, "invalid submesh"); NazaraAssert(subMesh->GetAnimationType() == m_animationType, "Submesh animation type doesn't match mesh animation type"); std::size_t index = m_subMeshes.size(); - AddSubMesh(std::move(subMesh)); - m_subMeshMap[identifier] = static_cast(index); + m_subMeshMap.emplace(std::move(identifier), index); } std::shared_ptr Mesh::BuildSubMesh(const Primitive& primitive, const MeshParams& params) @@ -404,12 +403,12 @@ namespace Nz return &m_skeleton; } - const std::shared_ptr& Mesh::GetSubMesh(const std::string& identifier) const + const std::shared_ptr& Mesh::GetSubMesh(std::string_view identifier) const { NazaraAssert(m_isValid, "Mesh should be created first"); auto it = m_subMeshMap.find(identifier); - NazaraAssert(it != m_subMeshMap.end(), "SubMesh " + identifier + " not found"); + NazaraAssertFmt(it != m_subMeshMap.end(), "SubMesh {0} not found", identifier); return m_subMeshes[it->second].subMesh; } @@ -429,12 +428,12 @@ namespace Nz return static_cast(m_subMeshes.size()); } - std::size_t Mesh::GetSubMeshIndex(const std::string& identifier) const + std::size_t Mesh::GetSubMeshIndex(std::string_view identifier) const { NazaraAssert(m_isValid, "Mesh should be created first"); auto it = m_subMeshMap.find(identifier); - NazaraAssert(it != m_subMeshMap.end(), "SubMesh " + identifier + " not found"); + NazaraAssertFmt(it != m_subMeshMap.end(), "SubMesh {0} not found", identifier); return it->second; } @@ -470,17 +469,15 @@ namespace Nz OnMeshInvalidateAABB(this); } - bool Mesh::HasSubMesh(const std::string& identifier) const + bool Mesh::HasSubMesh(std::string_view identifier) const { NazaraAssert(m_isValid, "Mesh should be created first"); - - return m_subMeshMap.find(identifier) != m_subMeshMap.end(); + return m_subMeshMap.contains(identifier); } bool Mesh::HasSubMesh(std::size_t index) const { NazaraAssert(m_isValid, "Mesh should be created first"); - return index < m_subMeshes.size(); } @@ -523,7 +520,7 @@ namespace Nz } } - void Mesh::RemoveSubMesh(const std::string& identifier) + void Mesh::RemoveSubMesh(std::string_view identifier) { std::size_t index = GetSubMeshIndex(identifier); RemoveSubMesh(index); @@ -554,7 +551,7 @@ namespace Nz return utility->GetMeshSaver().SaveToFile(*this, filePath, params); } - bool Mesh::SaveToStream(Stream& stream, const std::string& format, const MeshParams& params) + bool Mesh::SaveToStream(Stream& stream, std::string_view format, const MeshParams& params) { Utility* utility = Utility::Instance(); NazaraAssert(utility, "Utility module has not been initialized"); @@ -584,7 +581,7 @@ namespace Nz m_materialData.resize(matCount); - #ifdef NAZARA_DEBUG +#ifdef NAZARA_DEBUG for (SubMeshData& data : m_subMeshes) { std::size_t matIndex = data.subMesh->GetMaterialIndex(); @@ -594,7 +591,7 @@ namespace Nz NazaraWarning("SubMesh " + PointerToString(data.subMesh.get()) + " material index is over mesh new material count (" + NumberToString(matIndex) + " >= " + NumberToString(matCount) + "), setting it to first material"); } } - #endif +#endif } void Mesh::Transform(const Matrix4f& matrix) diff --git a/src/Nazara/Utility/Skeleton.cpp b/src/Nazara/Utility/Skeleton.cpp index 09c517c73..83f698688 100644 --- a/src/Nazara/Utility/Skeleton.cpp +++ b/src/Nazara/Utility/Skeleton.cpp @@ -4,6 +4,7 @@ #include #include +#include #include #include @@ -11,7 +12,7 @@ namespace Nz { struct SkeletonImpl { - std::unordered_map jointMap; + std::unordered_map, std::equal_to<>> jointMap; std::vector joints; Boxf aabb; bool aabbUpdated = false; @@ -68,7 +69,7 @@ namespace Nz return m_impl->aabb; } - Joint* Skeleton::GetJoint(const std::string& jointName) + Joint* Skeleton::GetJoint(std::string_view jointName) { NazaraAssert(m_impl, "skeleton must have been created"); @@ -91,7 +92,7 @@ namespace Nz return &m_impl->joints[index]; } - const Joint* Skeleton::GetJoint(const std::string& jointName) const + const Joint* Skeleton::GetJoint(std::string_view jointName) const { NazaraAssert(m_impl, "skeleton must have been created"); @@ -132,7 +133,7 @@ namespace Nz return static_cast(m_impl->joints.size()); } - std::size_t Skeleton::GetJointIndex(const std::string& jointName) const + std::size_t Skeleton::GetJointIndex(std::string_view jointName) const { NazaraAssert(m_impl, "skeleton must have been created"); @@ -259,9 +260,8 @@ namespace Nz const std::string& name = m_impl->joints[i].GetName(); if (!name.empty()) { - NazaraAssert(m_impl->jointMap.find(name) == m_impl->jointMap.end(), "Joint name \"" + name + "\" is already present in joint map"); - - m_impl->jointMap[name] = static_cast(i); + NazaraAssertFmt(!m_impl->jointMap.contains(name), "Joint name \{0}\" is already present in joint map", name); + m_impl->jointMap.emplace(name, i); } } diff --git a/src/Nazara/VulkanRenderer/Vulkan.cpp b/src/Nazara/VulkanRenderer/Vulkan.cpp index 4205fc0b6..868b6d61a 100644 --- a/src/Nazara/VulkanRenderer/Vulkan.cpp +++ b/src/Nazara/VulkanRenderer/Vulkan.cpp @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -22,11 +23,11 @@ namespace Nz struct AvailableVulkanLayer { VkLayerProperties layerProperties; - std::unordered_map extensionByName; + std::unordered_map, std::equal_to<>> extensionByName; std::vector extensionList; }; - void EnumerateVulkanLayers(std::vector& availableLayers, std::unordered_map& layerByName) + void EnumerateVulkanLayers(std::vector& availableLayers, std::unordered_map, std::equal_to<>>& layerByName) { std::vector layerList; if (Vk::Loader::EnumerateInstanceLayerProperties(&layerList)) @@ -175,7 +176,7 @@ namespace Nz std::vector enabledLayers; std::vector availableLayers; - std::unordered_map availableLayerByName; + std::unordered_map, std::equal_to<>> availableLayerByName; EnumerateVulkanLayers(availableLayers, availableLayerByName); if (auto result = parameters.GetBooleanParameter("VkInstanceInfo_OverrideEnabledLayers"); !result.GetValueOr(false)) @@ -211,12 +212,12 @@ namespace Nz } // Get supported extension list - std::unordered_set availableExtensions; + std::unordered_set, std::equal_to<>> availableExtensions; std::vector extensionList; if (Vk::Loader::EnumerateInstanceExtensionProperties(&extensionList)) { for (VkExtensionProperties& extProperty : extensionList) - availableExtensions.insert(extProperty.extensionName); + availableExtensions.emplace(extProperty.extensionName); } if (auto result = parameters.GetBooleanParameter("VkInstanceInfo_OverrideEnabledExtensions"); !result.GetValueOr(false)) diff --git a/tests/UnitTests/Engine/Core/CommandLineParametersTests.cpp b/tests/UnitTests/Engine/Core/CommandLineParametersTests.cpp index 606650b59..e6dddc7ea 100644 --- a/tests/UnitTests/Engine/Core/CommandLineParametersTests.cpp +++ b/tests/UnitTests/Engine/Core/CommandLineParametersTests.cpp @@ -1,4 +1,5 @@ #include +#include #include #include #include