From e8219efdde4c3f58aa429d17fb762e78d97fddfe Mon Sep 17 00:00:00 2001 From: Mathew Sutcliffe Date: Thu, 12 Oct 2017 23:50:15 +0100 Subject: [PATCH] Removed own implementation of std::index_sequence that was needed for GCC 4.9. --- src/blackmisc/algorithm.h | 8 +++--- src/blackmisc/integersequence.h | 45 ++++----------------------------- src/blackmisc/invoke.h | 6 ++--- src/blackmisc/lockfree.h | 4 +-- src/blackmisc/metaclass.h | 8 +++--- src/blackmisc/statusmessage.cpp | 24 +++++++++--------- 6 files changed, 30 insertions(+), 65 deletions(-) diff --git a/src/blackmisc/algorithm.h b/src/blackmisc/algorithm.h index 6f06939c5..8ea328b3c 100644 --- a/src/blackmisc/algorithm.h +++ b/src/blackmisc/algorithm.h @@ -145,7 +145,7 @@ namespace BlackMisc { //! \private template - void tupleForEachImpl(T &&tuple, F &&visitor, index_sequence) + void tupleForEachImpl(T &&tuple, F &&visitor, std::index_sequence) { // parameter pack swallow idiom static_cast(std::initializer_list @@ -155,7 +155,7 @@ namespace BlackMisc } //! \private template - void tupleForEachPairImpl(T &&tuple, F &&visitor, index_sequence) + void tupleForEachPairImpl(T &&tuple, F &&visitor, std::index_sequence) { // parameter pack swallow idiom static_cast(std::initializer_list @@ -171,7 +171,7 @@ namespace BlackMisc template void tupleForEach(T &&tuple, F &&visitor) { - using seq = Private::make_index_sequence>::value>; + using seq = std::make_index_sequence>::value>; return Private::tupleForEachImpl(std::forward(tuple), std::forward(visitor), seq()); } @@ -181,7 +181,7 @@ namespace BlackMisc template void tupleForEachPair(T &&tuple, F &&visitor) { - using seq = Private::make_index_sequence>::value / 2>; + using seq = std::make_index_sequence>::value / 2>; return Private::tupleForEachPairImpl(std::forward(tuple), std::forward(visitor), seq()); } } diff --git a/src/blackmisc/integersequence.h b/src/blackmisc/integersequence.h index fc854dfa4..3950f2c20 100644 --- a/src/blackmisc/integersequence.h +++ b/src/blackmisc/integersequence.h @@ -16,11 +16,6 @@ #include #include -#if ! (defined(Q_CC_GNU) && __GNUC__ <= 4) -//! \private -#define BLACK_HAS_INTEGER_SEQUENCE -#endif - namespace BlackMisc { @@ -28,36 +23,6 @@ namespace BlackMisc namespace Private { -#ifdef BLACK_HAS_INTEGER_SEQUENCE - template - using integer_sequence = std::integer_sequence; - template - using make_integer_sequence = std::make_integer_sequence; -#else // Our own implementation of std::integer_sequence (because not implemented by GCC 4.9) - template - struct integer_sequence - { - static const size_t size = sizeof...(Is); - typedef std::tuple...> tuple_type; - }; - template - struct GenSequence - { - typedef typename GenSequence::type type; - }; - template - struct GenSequence - { - typedef integer_sequence type; - }; - template - using make_integer_sequence = typename GenSequence::type; -#endif // ! BLACK_HAS_INTEGER_SEQUENCE - template - using index_sequence = integer_sequence; - template - using make_index_sequence = make_integer_sequence; - // Remove elements from an index_sequence for which a pack parameter fails to satisfy a given predicate. template struct MaskSequenceImpl @@ -66,19 +31,19 @@ namespace BlackMisc }; template - struct MaskSequenceImpl, index_sequence, true, Mask...> + struct MaskSequenceImpl, std::index_sequence, true, Mask...> { - using type = typename MaskSequenceImpl, index_sequence, Mask...>::type; + using type = typename MaskSequenceImpl, std::index_sequence, Mask...>::type; }; template - struct MaskSequenceImpl, index_sequence, false, Mask...> + struct MaskSequenceImpl, std::index_sequence, false, Mask...> { - using type = typename MaskSequenceImpl, index_sequence, Mask...>::type; + using type = typename MaskSequenceImpl, std::index_sequence, Mask...>::type; }; template - using MaskSequence = typename MaskSequenceImpl, Mask...>::type; + using MaskSequence = typename MaskSequenceImpl, Mask...>::type; } // namespace Private //! \endcond diff --git a/src/blackmisc/invoke.h b/src/blackmisc/invoke.h index f19759f70..7cf5f6806 100644 --- a/src/blackmisc/invoke.h +++ b/src/blackmisc/invoke.h @@ -41,13 +41,13 @@ namespace BlackMisc // Like invoke() but ignores the first argument if callable is not a member function. For uniform calling of callables with slot semantics. template - decltype(auto) invokeSlotImpl(F ptr, T *object, U tuple, index_sequence, std::true_type) + decltype(auto) invokeSlotImpl(F ptr, T *object, U tuple, std::index_sequence, std::true_type) { Q_UNUSED(tuple); // in case the pack expansion is empty return (object->*ptr)(std::forward>(std::get(tuple))...); } template - decltype(auto) invokeSlotImpl(F &&func, T *, U tuple, index_sequence, std::false_type) + decltype(auto) invokeSlotImpl(F &&func, T *, U tuple, std::index_sequence, std::false_type) { Q_UNUSED(tuple); // in case the pack expansion is empty return std::forward(func)(std::forward>(std::get(tuple))...); @@ -55,7 +55,7 @@ namespace BlackMisc template decltype(auto) invokeSlot(F &&func, T *object, Ts &&... args) { - using seq = MaskSequence, ! TIsQPrivateSignal>::value...>; + using seq = MaskSequence, ! TIsQPrivateSignal>::value...>; return invokeSlotImpl(std::forward(func), object, std::forward_as_tuple(std::forward(args)...), seq(), std::is_member_pointer>()); } diff --git a/src/blackmisc/lockfree.h b/src/blackmisc/lockfree.h index 15f9fa621..0bd91ee5c 100644 --- a/src/blackmisc/lockfree.h +++ b/src/blackmisc/lockfree.h @@ -293,12 +293,12 @@ namespace BlackMisc template auto operator ()(F &&function) && { - return call(std::forward(function), Private::make_index_sequence()); + return call(std::forward(function), std::make_index_sequence()); } private: template - auto call(F &&function, Private::index_sequence) + auto call(F &&function, std::index_sequence) { return std::forward(function)(std::get(m_tup).get()...); } diff --git a/src/blackmisc/metaclass.h b/src/blackmisc/metaclass.h index d9e9a055a..8a49a39f7 100644 --- a/src/blackmisc/metaclass.h +++ b/src/blackmisc/metaclass.h @@ -270,10 +270,10 @@ namespace BlackMisc private: template - using MaskSequence = Private::MaskSequence, Mask...>; + using MaskSequence = Private::MaskSequence, Mask...>; template - static auto filter(Private::index_sequence) { return CMetaClassIntrospector(); } + static auto filter(std::index_sequence) { return CMetaClassIntrospector(); } template using index = std::integral_constant; @@ -287,7 +287,7 @@ namespace BlackMisc struct CMetaClassAccessor { template - static auto getIntrospector(index_sequence) + static auto getIntrospector(std::index_sequence) { return CMetaClassIntrospector(); } @@ -295,7 +295,7 @@ namespace BlackMisc template static auto getIntrospector() { - return getIntrospector(Private::make_index_sequence()); + return getIntrospector(std::make_index_sequence()); } template diff --git a/src/blackmisc/statusmessage.cpp b/src/blackmisc/statusmessage.cpp index f27e95dbb..3a13e2033 100644 --- a/src/blackmisc/statusmessage.cpp +++ b/src/blackmisc/statusmessage.cpp @@ -23,8 +23,8 @@ namespace BlackMisc { namespace { - template QString arg(index_sequence, const QString &format, const QStringList &args) { return format.arg(args[Is]...); } - QString arg(index_sequence<>, const QString &format, const QStringList &) { return format; } + template QString arg(std::index_sequence, const QString &format, const QStringList &args) { return format.arg(args[Is]...); } + QString arg(std::index_sequence<>, const QString &format, const QStringList &) { return format; } } QString arg(const QString &format, const QStringList &args) @@ -37,17 +37,17 @@ namespace BlackMisc { switch (args.size()) { - case 0: return arg(Private::make_index_sequence<0>(), format, args); - case 1: return arg(Private::make_index_sequence<1>(), format, args); - case 2: return arg(Private::make_index_sequence<2>(), format, args); - case 3: return arg(Private::make_index_sequence<3>(), format, args); - case 4: return arg(Private::make_index_sequence<4>(), format, args); - case 5: return arg(Private::make_index_sequence<5>(), format, args); - case 6: return arg(Private::make_index_sequence<6>(), format, args); - case 7: return arg(Private::make_index_sequence<7>(), format, args); - case 8: return arg(Private::make_index_sequence<8>(), format, args); + case 0: return arg(std::make_index_sequence<0>(), format, args); + case 1: return arg(std::make_index_sequence<1>(), format, args); + case 2: return arg(std::make_index_sequence<2>(), format, args); + case 3: return arg(std::make_index_sequence<3>(), format, args); + case 4: return arg(std::make_index_sequence<4>(), format, args); + case 5: return arg(std::make_index_sequence<5>(), format, args); + case 6: return arg(std::make_index_sequence<6>(), format, args); + case 7: return arg(std::make_index_sequence<7>(), format, args); + case 8: return arg(std::make_index_sequence<8>(), format, args); default: qWarning("Too many arguments to BlackMisc::Private::arg"); // intentional fall-through - case 9: return arg(Private::make_index_sequence<9>(), format, args); + case 9: return arg(std::make_index_sequence<9>(), format, args); } } }