diff --git a/CMakeLists.txt b/CMakeLists.txt index a693502..f5684e3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -12,6 +12,8 @@ option(OMATH_USE_AVX2 "Omath will use AVX2 to boost performance" ON) option(OMATH_IMGUI_INTEGRATION "Omath will define method to convert omath types to imgui types" OFF) option(OMATH_BUILD_EXAMPLES "Build example projects with you can learn & play" OFF) option(OMATH_STATIC_MSVC_RUNTIME_LIBRARY "Force Omath to link static runtime" OFF) +option(OMATH_SUPRESS_SAFETY_CHECKS "Supress some safety checks in release build to improve general performance" ON) + if (OMATH_BUILD_AS_SHARED_LIBRARY) add_library(omath SHARED source/matrix.cpp) @@ -45,6 +47,10 @@ if (OMATH_USE_AVX2) target_compile_definitions(omath PUBLIC OMATH_USE_AVX2) endif() +if (OMATH_SUPRESS_SAFETY_CHECKS) + target_compile_definitions(omath PUBLIC OMATH_SUPRESS_SAFETY_CHECKS) +endif() + set_target_properties(omath PROPERTIES ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/out/${CMAKE_BUILD_TYPE}" LIBRARY_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/out/${CMAKE_BUILD_TYPE}" diff --git a/include/omath/mat.hpp b/include/omath/mat.hpp index 55f61ee..f73fb20 100644 --- a/include/omath/mat.hpp +++ b/include/omath/mat.hpp @@ -118,9 +118,10 @@ namespace omath [[nodiscard]] constexpr const Type& At(const size_t rowIndex, const size_t columnIndex) const { +#if !defined(NDEBUG) && defined(OMATH_SUPRESS_SAFETY_CHECKS) if (rowIndex >= Rows || columnIndex >= Columns) throw std::out_of_range("Index out of range"); - +#endif if constexpr (StoreType == MatStoreType::ROW_MAJOR) return m_data[rowIndex * Columns + columnIndex]; @@ -175,7 +176,7 @@ namespace omath constexpr Mat& operator*=(const Type& f) noexcept { - std::ranges::for_each(m_data,[&f](auto& val) {val *= f;}); + std::ranges::for_each(m_data, [&f](auto& val) {val *= f;}); return *this; } @@ -196,7 +197,7 @@ namespace omath constexpr Mat& operator/=(const Type& value) noexcept { - std::ranges::for_each(m_data,[&value](auto& val) {val /= value;}); + std::ranges::for_each(m_data, [&value](auto& val) {val /= value;}); return *this; } @@ -243,7 +244,7 @@ namespace omath if constexpr (Rows == 1) return At(0, 0); - else if constexpr (Rows == 2) + if constexpr (Rows == 2) return At(0, 0) * At(1, 1) - At(0, 1) * At(1, 0); else {