Branch data Line data Source code
# 1 : : // Copyright (c) 2020-2021 The Bitcoin Core developers # 2 : : // Distributed under the MIT software license, see the accompanying # 3 : : // file COPYING or http://www.opensource.org/licenses/mit-license.php. # 4 : : # 5 : : #include <deploymentstatus.h> # 6 : : # 7 : : #include <consensus/params.h> # 8 : : #include <versionbits.h> # 9 : : # 10 : : #include <type_traits> # 11 : : # 12 : : VersionBitsCache g_versionbitscache; # 13 : : # 14 : : /* Basic sanity checking for BuriedDeployment/DeploymentPos enums and # 15 : : * ValidDeployment check */ # 16 : : # 17 : : static_assert(ValidDeployment(Consensus::DEPLOYMENT_TESTDUMMY), "sanity check of DeploymentPos failed (TESTDUMMY not valid)"); # 18 : : static_assert(!ValidDeployment(Consensus::MAX_VERSION_BITS_DEPLOYMENTS), "sanity check of DeploymentPos failed (MAX value considered valid)"); # 19 : : static_assert(!ValidDeployment(static_cast<Consensus::BuriedDeployment>(Consensus::DEPLOYMENT_TESTDUMMY)), "sanity check of BuriedDeployment failed (overlaps with DeploymentPos)"); # 20 : : # 21 : : /* ValidDeployment only checks upper bounds for ensuring validity. # 22 : : * This checks that the lowest possible value or the type is also a # 23 : : * (specific) valid deployment so that lower bounds don't need to be checked. # 24 : : */ # 25 : : # 26 : : template<typename T, T x> # 27 : : static constexpr bool is_minimum() # 28 : 0 : { # 29 : 0 : using U = typename std::underlying_type<T>::type; # 30 : 0 : return x == std::numeric_limits<U>::min(); # 31 : 0 : } # 32 : : # 33 : : static_assert(is_minimum<Consensus::BuriedDeployment, Consensus::DEPLOYMENT_HEIGHTINCB>(), "heightincb is not minimum value for BuriedDeployment"); # 34 : : static_assert(is_minimum<Consensus::DeploymentPos, Consensus::DEPLOYMENT_TESTDUMMY>(), "testdummy is not minimum value for DeploymentPos");