| 1 | #ifndef SIGNALSMITH_DSP_COMMON_H |
| 2 | #define SIGNALSMITH_DSP_COMMON_H |
| 3 | |
| 4 | #ifndef M_PI |
| 5 | #define M_PI 3.14159265358979323846264338327950288 |
| 6 | #endif |
| 7 | |
| 8 | namespace signalsmith { |
| 9 | /** @defgroup Common Common |
| 10 | @brief Definitions and helper classes used by the rest of the library |
| 11 | |
| 12 | @{ |
| 13 | @file |
| 14 | */ |
| 15 | |
| 16 | #define SIGNALSMITH_DSP_VERSION_MAJOR 1 |
| 17 | #define SIGNALSMITH_DSP_VERSION_MINOR 6 |
| 18 | #define SIGNALSMITH_DSP_VERSION_PATCH 0 |
| 19 | #define SIGNALSMITH_DSP_VERSION_STRING "1.6.0" |
| 20 | |
| 21 | /** Version compatability check. |
| 22 | \code{.cpp} |
| 23 | static_assert(signalsmith::version(1, 4, 1), "version check"); |
| 24 | \endcode |
| 25 | ... or use the equivalent `SIGNALSMITH_DSP_VERSION_CHECK`. |
| 26 | Major versions are not compatible with each other. Minor and patch versions are backwards-compatible. |
| 27 | */ |
| 28 | constexpr bool versionCheck(int major, int minor, int patch=0) { |
| 29 | return major == SIGNALSMITH_DSP_VERSION_MAJOR |
| 30 | && (SIGNALSMITH_DSP_VERSION_MINOR > minor |
| 31 | || (SIGNALSMITH_DSP_VERSION_MINOR == minor && SIGNALSMITH_DSP_VERSION_PATCH >= patch)); |
| 32 | } |
| 33 | |
| 34 | /// Check the library version is compatible (semver). |
| 35 | #define SIGNALSMITH_DSP_VERSION_CHECK(major, minor, patch) \ |
| 36 | static_assert(::signalsmith::versionCheck(major, minor, patch), "signalsmith library version is " SIGNALSMITH_DSP_VERSION_STRING); |
| 37 | |
| 38 | /** @} */ |
| 39 | } // signalsmith:: |
| 40 | #else |
| 41 | // If we've already included it, check it's the same version |
| 42 | static_assert(SIGNALSMITH_DSP_VERSION_MAJOR == 1 && SIGNALSMITH_DSP_VERSION_MINOR == 6 && SIGNALSMITH_DSP_VERSION_PATCH == 0, "multiple versions of the Signalsmith DSP library" ); |
| 43 | #endif // include guard |
| 44 | |