From: <man...@us...> - 2013-07-04 00:40:09
|
Revision: 2492 http://sourceforge.net/p/modplug/code/2492 Author: manxorist Date: 2013-07-04 00:40:04 +0000 (Thu, 04 Jul 2013) Log Message: ----------- [Ref] Add saturate_cast for floating point source types. Modified Paths: -------------- trunk/OpenMPT/common/misc_util.h trunk/OpenMPT/test/test.cpp Modified: trunk/OpenMPT/common/misc_util.h =================================================================== --- trunk/OpenMPT/common/misc_util.h 2013-07-04 00:21:34 UTC (rev 2491) +++ trunk/OpenMPT/common/misc_util.h 2013-07-04 00:40:04 UTC (rev 2492) @@ -131,6 +131,36 @@ } } +template <typename Tdst> +inline Tdst saturate_cast(double src) +//----------------------------------- +{ + if(src >= std::numeric_limits<Tdst>::max()) + { + return std::numeric_limits<Tdst>::max(); + } + if(src <= std::numeric_limits<Tdst>::min()) + { + return std::numeric_limits<Tdst>::min(); + } + return static_cast<Tdst>(src); +} + +template <typename Tdst> +inline Tdst saturate_cast(float src) +//---------------------------------- +{ + if(src >= std::numeric_limits<Tdst>::max()) + { + return std::numeric_limits<Tdst>::max(); + } + if(src <= std::numeric_limits<Tdst>::min()) + { + return std::numeric_limits<Tdst>::min(); + } + return static_cast<Tdst>(src); +} + } // namespace mpt Modified: trunk/OpenMPT/test/test.cpp =================================================================== --- trunk/OpenMPT/test/test.cpp 2013-07-04 00:21:34 UTC (rev 2491) +++ trunk/OpenMPT/test/test.cpp 2013-07-04 00:40:04 UTC (rev 2492) @@ -547,6 +547,8 @@ VERIFY_EQUAL( mpt::saturate_cast<uint32>(std::numeric_limits<int32>::min() - int64(1)), std::numeric_limits<uint32>::min() ); VERIFY_EQUAL( mpt::saturate_cast<uint32>(std::numeric_limits<int32>::max() + int64(1)), (uint32)std::numeric_limits<int32>::max() + 1 ); + VERIFY_EQUAL( mpt::saturate_cast<uint32>(static_cast<double>(std::numeric_limits<int64>::max())), std::numeric_limits<uint32>::max() ); + VERIFY_EQUAL( mpt::String::LTrim(" "), "" ); VERIFY_EQUAL( mpt::String::RTrim(" "), "" ); VERIFY_EQUAL( mpt::String::Trim(" "), "" ); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |