From 49b8f0fb81945599335e8f29307004fcd2f92acb Mon Sep 17 00:00:00 2001 From: Thierry Lelegard Date: Mon, 1 May 2023 18:39:39 +0200 Subject: [PATCH] Workaround for bug in MSVC 19.35 --- src/libtsduck/base/network/tsPcapFile.cpp | 2 +- src/libtsduck/base/types/tsBufferTemplate.h | 2 +- src/libtsduck/base/types/tsIntegerUtils.cpp | 3 +-- src/libtsduck/base/types/tsIntegerUtils.h | 9 +-------- src/libtsduck/tsVersion.h | 2 +- src/utest/utestIntegerUtils.cpp | 14 +++++--------- 6 files changed, 10 insertions(+), 22 deletions(-) diff --git a/src/libtsduck/base/network/tsPcapFile.cpp b/src/libtsduck/base/network/tsPcapFile.cpp index eddacc79f..48eb5bd39 100644 --- a/src/libtsduck/base/network/tsPcapFile.cpp +++ b/src/libtsduck/base/network/tsPcapFile.cpp @@ -269,7 +269,7 @@ bool ts::PcapFile::analyzeNgInterface(const uint8_t* data, size_t size, Report& } else if (tag == PCAPNG_IF_TSRESOL && len == 1) { if ((data[0] & 0x80) == 0) { - ifd.time_units = Power10(data[0]); + ifd.time_units = Power10(data[0]); } else { ifd.time_units = TS_UCONST64(1) << (data[0] & 0x7F); diff --git a/src/libtsduck/base/types/tsBufferTemplate.h b/src/libtsduck/base/types/tsBufferTemplate.h index 27fddb095..a2459d0dc 100644 --- a/src/libtsduck/base/types/tsBufferTemplate.h +++ b/src/libtsduck/base/types/tsBufferTemplate.h @@ -280,7 +280,7 @@ bool ts::Buffer::putBCD(INT value, size_t bcd_count) if (bcd_count > 0) { typedef typename std::make_unsigned::type UNSINT; UNSINT uvalue = static_cast(value); - UNSINT factor = Power10(bcd_count); + UNSINT factor = static_cast(Power10(bcd_count)); while (bcd_count-- > 0) { uvalue %= factor; factor /= 10; diff --git a/src/libtsduck/base/types/tsIntegerUtils.cpp b/src/libtsduck/base/types/tsIntegerUtils.cpp index ffb8cc22f..a5f8dc27c 100644 --- a/src/libtsduck/base/types/tsIntegerUtils.cpp +++ b/src/libtsduck/base/types/tsIntegerUtils.cpp @@ -81,8 +81,7 @@ size_t ts::MaxHexaWidth(size_t typeSize, size_t digitSeparatorSize) // Get a power of 10 using a fast lookup table. //---------------------------------------------------------------------------- -template<> -uint64_t ts::Power10(size_t pow) +uint64_t ts::Power10(size_t pow) { // Assume that not integer type is larger than 64 bits => 10^19 is the largest unsigned value. static constexpr size_t MAX_POW10 = 19; diff --git a/src/libtsduck/base/types/tsIntegerUtils.h b/src/libtsduck/base/types/tsIntegerUtils.h index 549aab4f6..a98c2bc23 100644 --- a/src/libtsduck/base/types/tsIntegerUtils.h +++ b/src/libtsduck/base/types/tsIntegerUtils.h @@ -648,18 +648,11 @@ namespace ts { //! //! Get a power of 10 using a fast lookup table. //! - //! @tparam INT An integer type. //! @param [in] pow The requested power of 10. //! @return The requested power of 10. If the value is larger than the largest integer on //! this platform, the result is undefined. //! - template::value>::type* = nullptr> - inline INT Power10(size_t pow) { return static_cast(Power10(pow)); } - - //! @cond nodoxygen - // Template specialization. - template<> TSDUCKDLL uint64_t Power10(size_t pow); - //! @endcond + TSDUCKDLL uint64_t Power10(size_t pow); //! //! Static values of power of 10. diff --git a/src/libtsduck/tsVersion.h b/src/libtsduck/tsVersion.h index 39d06e5bd..0c63bb336 100644 --- a/src/libtsduck/tsVersion.h +++ b/src/libtsduck/tsVersion.h @@ -44,4 +44,4 @@ //! //! TSDuck commit number (automatically updated by Git hooks). //! -#define TS_COMMIT 3195 +#define TS_COMMIT 3197 diff --git a/src/utest/utestIntegerUtils.cpp b/src/utest/utestIntegerUtils.cpp index 3f429ed6e..e4373027e 100644 --- a/src/utest/utestIntegerUtils.cpp +++ b/src/utest/utestIntegerUtils.cpp @@ -254,15 +254,11 @@ void IntegerUtilsTest::testBitSize() void IntegerUtilsTest::testPower10() { - TSUNIT_EQUAL(1, ts::Power10(0)); - TSUNIT_EQUAL(1, ts::Power10(0)); - TSUNIT_EQUAL(10, ts::Power10(1)); - TSUNIT_EQUAL(10, ts::Power10(1)); - TSUNIT_EQUAL(100, ts::Power10(2)); - TSUNIT_EQUAL(100, ts::Power10(2)); - TSUNIT_EQUAL(1000000, ts::Power10(6)); - TSUNIT_EQUAL(1000000, ts::Power10(6)); - TSUNIT_EQUAL(TS_UCONST64(1000000000000000), ts::Power10(15)); + TSUNIT_EQUAL(1, ts::Power10(0)); + TSUNIT_EQUAL(10, ts::Power10(1)); + TSUNIT_EQUAL(100, ts::Power10(2)); + TSUNIT_EQUAL(1000000, ts::Power10(6)); + TSUNIT_EQUAL(TS_UCONST64(1000000000000000), ts::Power10(15)); TSUNIT_EQUAL(1, (ts::static_power10::value)); TSUNIT_EQUAL(1, (ts::static_power10::value));