mirror of
https://github.com/orange-cpp/omath.git
synced 2026-02-14 07:23:26 +00:00
added new build option
This commit is contained in:
@@ -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_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_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_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)
|
if (OMATH_BUILD_AS_SHARED_LIBRARY)
|
||||||
add_library(omath SHARED source/matrix.cpp)
|
add_library(omath SHARED source/matrix.cpp)
|
||||||
@@ -45,6 +47,10 @@ if (OMATH_USE_AVX2)
|
|||||||
target_compile_definitions(omath PUBLIC OMATH_USE_AVX2)
|
target_compile_definitions(omath PUBLIC OMATH_USE_AVX2)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if (OMATH_SUPRESS_SAFETY_CHECKS)
|
||||||
|
target_compile_definitions(omath PUBLIC OMATH_SUPRESS_SAFETY_CHECKS)
|
||||||
|
endif()
|
||||||
|
|
||||||
set_target_properties(omath PROPERTIES
|
set_target_properties(omath PROPERTIES
|
||||||
ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/out/${CMAKE_BUILD_TYPE}"
|
ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/out/${CMAKE_BUILD_TYPE}"
|
||||||
LIBRARY_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/out/${CMAKE_BUILD_TYPE}"
|
LIBRARY_OUTPUT_DIRECTORY "${CMAKE_SOURCE_DIR}/out/${CMAKE_BUILD_TYPE}"
|
||||||
|
|||||||
@@ -118,9 +118,10 @@ namespace omath
|
|||||||
[[nodiscard]]
|
[[nodiscard]]
|
||||||
constexpr const Type& At(const size_t rowIndex, const size_t columnIndex) const
|
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)
|
if (rowIndex >= Rows || columnIndex >= Columns)
|
||||||
throw std::out_of_range("Index out of range");
|
throw std::out_of_range("Index out of range");
|
||||||
|
#endif
|
||||||
if constexpr (StoreType == MatStoreType::ROW_MAJOR)
|
if constexpr (StoreType == MatStoreType::ROW_MAJOR)
|
||||||
return m_data[rowIndex * Columns + columnIndex];
|
return m_data[rowIndex * Columns + columnIndex];
|
||||||
|
|
||||||
@@ -175,7 +176,7 @@ namespace omath
|
|||||||
|
|
||||||
constexpr Mat& operator*=(const Type& f) noexcept
|
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;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -196,7 +197,7 @@ namespace omath
|
|||||||
|
|
||||||
constexpr Mat& operator/=(const Type& value) noexcept
|
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;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -243,7 +244,7 @@ namespace omath
|
|||||||
if constexpr (Rows == 1)
|
if constexpr (Rows == 1)
|
||||||
return At(0, 0);
|
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);
|
return At(0, 0) * At(1, 1) - At(0, 1) * At(1, 0);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user