finite.hpp cmath stdexcept format serif/utils/misc/concepts/numeric.hpp serif/utils/misc/concepts/exceptions.hpp serif/utils/error/errors.hpp src/lib/serif/eos/models/polytropic.cpp serif serif::utils serif::utils::misc #pragmaonce #include<cmath> #include<stdexcept> #include<format> #include"serif/utils/misc/concepts/numeric.hpp" #include"serif/utils/misc/concepts/exceptions.hpp" #include"serif/utils/error/errors.hpp" namespaceserif::utils::misc{ template<typenameExceptionType,errors::SERiFErrorCodeErrorCode,concepts::IsNumericScalar> voidvalidate_finite(constScalarvalue){ if(!std::isfinite(value)){ errors::serif_error<ExceptionType, ErrorCode>("Thevaluemustbefinite.Insteadavalueof{}hasbeenprovided",value); }; } template<typenameExceptionType,errors::SERiFErrorCodeErrorCode,concepts::IsComparableToNumericScalar> voidvalidate_greater_than(constScalarvalue,constScalarpredicate){ validate_finite<ExceptionType, ErrorCode>(value); if(value<predicate){ errors::serif_error<ExceptionType, ErrorCode>("Thevaluemustbefiniteandgreaterthan{}.Whilethevalueisfiniteitisalsolessthan{}.Avalueof{}hasbeenprovided",predicate,predicate,value); }; } template<typenameExceptionType,errors::SERiFErrorCodeErrorCode,concepts::IsComparableToNumericScalar> voidvalidate_less_than(constScalarvalue,constScalarpredicate){ validate_finite<ExceptionType, ErrorCode>(value); if(value>predicate){ errors::serif_error<ExceptionType, ErrorCode>("Thevaluemustbefiniteandlessthan{}.Whilethevalueisfiniteitisalsogreaterthan{}.Avalueof{}hasbeenprovided",predicate,predicate,value); }; } template<typenameExceptionType,errors::SERiFErrorCodeErrorCode,concepts::IsComparableToNumericScalar> voidvalidate_nonnegativity(constScalarvalue){ validate_finite<ExceptionType, ErrorCode>(value); validate_greater_than<ExceptionType, ErrorCode>(value,static_cast<Scalar>(0)); } }