diff --git a/conanfile.py b/conanfile.py index 525926ba..b81bb763 100644 --- a/conanfile.py +++ b/conanfile.py @@ -84,11 +84,11 @@ class UnitsConan(ConanFile): def _configure_cmake(self, folder="src"): cmake = CMake(self) if self.options.downcast_mode == "off": - cmake.definitions["DOWNCAST_MODE"] = 0 + cmake.definitions["UNITS_DOWNCAST_MODE"] = 0 elif self.options.downcast_mode == "on": - cmake.definitions["DOWNCAST_MODE"] = 1 + cmake.definitions["UNITS_DOWNCAST_MODE"] = 1 elif self.options.downcast_mode == "auto": - cmake.definitions["DOWNCAST_MODE"] = 2 + cmake.definitions["UNITS_DOWNCAST_MODE"] = 2 if self._run_tests: # developer's mode (unit tests, examples, documentation, restrictive compilation warnings, ...) diff --git a/docs/usage.rst b/docs/usage.rst index 876ad4fd..8f67ba09 100644 --- a/docs/usage.rst +++ b/docs/usage.rst @@ -134,14 +134,14 @@ Specifies how :ref:`The Downcasting Facility` works: CMake Options ^^^^^^^^^^^^^ -DOWNCAST_MODE -+++++++++++++ +UNITS_DOWNCAST_MODE ++++++++++++++++++++ **Values**: ``OFF``/``ON``/``AUTO`` **Defaulted to**: ``ON`` -Equivalent to `downcast`_. +Equivalent to `downcast_mode`_. GENERATE_DOCS diff --git a/example/hello_units.cpp b/example/hello_units.cpp index 8a0f73ed..1c907134 100644 --- a/example/hello_units.cpp +++ b/example/hello_units.cpp @@ -37,7 +37,7 @@ int main() using namespace units::physical::si::literals; Speed auto v1 = avg_speed(220_q_km, 2_q_h); Speed auto v2 = avg_speed(si::length(140), si::time(2)); -#if DOWNCAST_MODE == 0 +#if UNITS_DOWNCAST_MODE == 0 Speed auto v3 = quantity_cast(v2); #else Speed auto v3 = quantity_cast(v2); diff --git a/example/measurement.cpp b/example/measurement.cpp index 76daef09..20269ac8 100644 --- a/example/measurement.cpp +++ b/example/measurement.cpp @@ -131,7 +131,7 @@ void example() const auto t = si::time>(measurement(1.2, 0.1)); const Speed auto v1 = a * t; -#if DOWNCAST_MODE == 0 +#if UNITS_DOWNCAST_MODE == 0 std::cout << a << " * " << t << " = " << v1 << " = " << quantity_cast(v1) << '\n'; #else std::cout << a << " * " << t << " = " << v1 << " = " << quantity_cast(v1) << '\n'; diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index b5d13abb..f79b2bad 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -27,8 +27,8 @@ project(mp-units LANGUAGES CXX ) -set(DOWNCAST_MODE ON CACHE STRING "Select downcasting mode") -set_property(CACHE DOWNCAST_MODE PROPERTY STRINGS AUTO ON OFF) +set(UNITS_DOWNCAST_MODE ON CACHE STRING "Select downcasting mode") +set_property(CACHE UNITS_DOWNCAST_MODE PROPERTY STRINGS AUTO ON OFF) # set path to custom cmake modules list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/../cmake") @@ -84,15 +84,15 @@ elseif(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") ) endif() -if(DOWNCAST_MODE STREQUAL "AUTO") - message(STATUS "Configuring DOWNCAST_MODE=AUTOMATIC") - target_compile_definitions(mp-units INTERFACE DOWNCAST_MODE=2) -elseif(DOWNCAST_MODE) - message(STATUS "Configuring DOWNCAST_MODE=ON") - target_compile_definitions(mp-units INTERFACE DOWNCAST_MODE=1) +if(UNITS_DOWNCAST_MODE STREQUAL "AUTO") + message(STATUS "Configuring UNITS_DOWNCAST_MODE=AUTOMATIC") + target_compile_definitions(mp-units INTERFACE UNITS_DOWNCAST_MODE=2) +elseif(UNITS_DOWNCAST_MODE) + message(STATUS "Configuring UNITS_DOWNCAST_MODE=ON") + target_compile_definitions(mp-units INTERFACE UNITS_DOWNCAST_MODE=1) else() - message(STATUS "Configuring DOWNCAST_MODE=OFF") - target_compile_definitions(mp-units INTERFACE DOWNCAST_MODE=0) + message(STATUS "Configuring UNITS_DOWNCAST_MODE=OFF") + target_compile_definitions(mp-units INTERFACE UNITS_DOWNCAST_MODE=0) endif() add_library(mp-units::mp-units ALIAS mp-units) diff --git a/src/include/units/bits/external/downcasting.h b/src/include/units/bits/external/downcasting.h index ae5b068c..9d48af59 100644 --- a/src/include/units/bits/external/downcasting.h +++ b/src/include/units/bits/external/downcasting.h @@ -25,12 +25,12 @@ #include #include -#ifdef DOWNCAST_MODE -#if DOWNCAST_MODE < 0 || DOWNCAST_MODE > 2 -#error "Invalid DOWNCAST_MODE value" +#ifdef UNITS_DOWNCAST_MODE +#if UNITS_DOWNCAST_MODE < 0 || UNITS_DOWNCAST_MODE > 2 +#error "Invalid UNITS_DOWNCAST_MODE value" #endif #else -#define DOWNCAST_MODE 1 +#define UNITS_DOWNCAST_MODE 1 #endif namespace units { @@ -72,7 +72,7 @@ enum class downcast_mode { }; -template(DOWNCAST_MODE)> +template(UNITS_DOWNCAST_MODE)> struct downcast_dispatch : std::conditional_t> {}; diff --git a/src/include/units/bits/quantity_of.h b/src/include/units/bits/quantity_of.h index 16adc768..04191d4d 100644 --- a/src/include/units/bits/quantity_of.h +++ b/src/include/units/bits/quantity_of.h @@ -28,7 +28,7 @@ namespace units { // DimensionOfT -#if DOWNCAST_MODE == 0 +#if UNITS_DOWNCAST_MODE == 0 namespace detail { @@ -53,7 +53,7 @@ concept EquivalentUnknownDimensionOfT = Dimension && is_derived_from_specia */ template typename DimTemplate> concept DimensionOfT = Dimension && (is_derived_from_specialization_of -#if DOWNCAST_MODE == 0 +#if UNITS_DOWNCAST_MODE == 0 || EquivalentUnknownDimensionOfT #endif ); diff --git a/test/unit_test/runtime/fmt_test.cpp b/test/unit_test/runtime/fmt_test.cpp index ff36fad5..683c0491 100644 --- a/test/unit_test/runtime/fmt_test.cpp +++ b/test/unit_test/runtime/fmt_test.cpp @@ -459,7 +459,7 @@ TEST_CASE("operator<< on a quantity", "[text][ostream][fmt]") SECTION("percents") { -#if DOWNCAST_MODE == 0 +#if UNITS_DOWNCAST_MODE == 0 const auto q = quantity_cast(15._q_m / 100._q_m); #else const auto q = quantity_cast(15._q_m / 100._q_m); diff --git a/test/unit_test/static/dimensions_concepts_test.cpp b/test/unit_test/static/dimensions_concepts_test.cpp index 298628ea..29e4bc1a 100644 --- a/test/unit_test/static/dimensions_concepts_test.cpp +++ b/test/unit_test/static/dimensions_concepts_test.cpp @@ -57,7 +57,7 @@ static_assert(!Area>); static_assert(Volume>); static_assert(!Volume>); -#if DOWNCAST_MODE == 0 +#if UNITS_DOWNCAST_MODE == 0 static_assert(Volume>, unknown_coherent_unit>>); #endif @@ -66,19 +66,19 @@ static_assert(!Speed>); static_assert(Acceleration>); static_assert(!Acceleration>); -#if DOWNCAST_MODE == 0 +#if UNITS_DOWNCAST_MODE == 0 static_assert(Acceleration, exponent>, unknown_coherent_unit>>); #endif static_assert(Force>); static_assert(!Force>); -#if DOWNCAST_MODE == 0 +#if UNITS_DOWNCAST_MODE == 0 // static_assert(Force, exponent, exponent>, unknown_coherent_unit>>); #endif static_assert(Energy>); static_assert(!Energy>); -#if DOWNCAST_MODE == 0 +#if UNITS_DOWNCAST_MODE == 0 // static_assert(Energy, exponent, exponent>, unknown_coherent_unit>>); #endif diff --git a/test/unit_test/static/quantity_test.cpp b/test/unit_test/static/quantity_test.cpp index 85af6f2c..54783bc7 100644 --- a/test/unit_test/static/quantity_test.cpp +++ b/test/unit_test/static/quantity_test.cpp @@ -197,7 +197,7 @@ static_assert(q1.count() == 2); constexpr dimensionless q2 = q1; static_assert(q2.count() == 2000); -#if DOWNCAST_MODE == 0 +#if UNITS_DOWNCAST_MODE == 0 static_assert(quantity_cast(q1).count() == 2000); #else static_assert(quantity_cast(q1).count() == 2000); @@ -310,7 +310,7 @@ static_assert(invalid_dimensionless_operations); static_assert(compare>); -#if DOWNCAST_MODE == 0 +#if UNITS_DOWNCAST_MODE == 0 static_assert(quantity_cast(50._q_m / 100._q_m).count() == 50); #else static_assert(quantity_cast(50._q_m / 100._q_m).count() == 50); @@ -347,7 +347,7 @@ static_assert(compare(2_q_m)), decltype(4_q_m2)>); // downcasting -#if DOWNCAST_MODE == 0 +#if UNITS_DOWNCAST_MODE == 0 static_assert(std::is_same_v, units::exponent>, scaled_unit, std::int64_t>>); static_assert(std::is_same_v, std::int64_t>>); diff --git a/test/unit_test/static/test_tools.h b/test/unit_test/static/test_tools.h index c30d0aca..4d9dc1de 100644 --- a/test/unit_test/static/test_tools.h +++ b/test/unit_test/static/test_tools.h @@ -25,7 +25,7 @@ #include "units/bits/equivalent.h" template -inline constexpr bool compare_impl = DOWNCAST_MODE != 0 ? std::is_same_v : (std::is_same_v || units::equivalent); +inline constexpr bool compare_impl = UNITS_DOWNCAST_MODE != 0 ? std::is_same_v : (std::is_same_v || units::equivalent); template inline constexpr bool compare = compare_impl, std::remove_cvref_t>;