mirror of git://gcc.gnu.org/git/gcc.git
PR libstdc++/66059 optimise _Build_index_tuple
PR libstdc++/66059 * include/std/utility (_Build_index_tuple): Optimise. From-SVN: r230496
This commit is contained in:
parent
490325650d
commit
5f0b7c9548
|
|
@ -1,3 +1,8 @@
|
||||||
|
2015-11-17 Jonathan Wakely <jwakely@redhat.com>
|
||||||
|
|
||||||
|
PR libstdc++66059
|
||||||
|
* include/std/utility (_Build_index_tuple): Optimise.
|
||||||
|
|
||||||
2015-11-16 Doug Evans <dje@google.com>
|
2015-11-16 Doug Evans <dje@google.com>
|
||||||
|
|
||||||
PR libstdc++/67440
|
PR libstdc++/67440
|
||||||
|
|
|
||||||
|
|
@ -212,17 +212,28 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
||||||
|
|
||||||
// Stores a tuple of indices. Used by tuple and pair, and by bind() to
|
// Stores a tuple of indices. Used by tuple and pair, and by bind() to
|
||||||
// extract the elements in a tuple.
|
// extract the elements in a tuple.
|
||||||
template<size_t... _Indexes>
|
template<size_t... _Indexes> struct _Index_tuple { };
|
||||||
struct _Index_tuple
|
|
||||||
|
// Concatenates two _Index_tuples.
|
||||||
|
template<typename _Itup1, typename _Itup2> struct _Itup_cat;
|
||||||
|
|
||||||
|
template<size_t... _Ind1, size_t... _Ind2>
|
||||||
|
struct _Itup_cat<_Index_tuple<_Ind1...>, _Index_tuple<_Ind2...>>
|
||||||
{
|
{
|
||||||
typedef _Index_tuple<_Indexes..., sizeof...(_Indexes)> __next;
|
using __type = _Index_tuple<_Ind1..., (_Ind2 + sizeof...(_Ind1))...>;
|
||||||
};
|
};
|
||||||
|
|
||||||
// Builds an _Index_tuple<0, 1, 2, ..., _Num-1>.
|
// Builds an _Index_tuple<0, 1, 2, ..., _Num-1>.
|
||||||
template<size_t _Num>
|
template<size_t _Num>
|
||||||
struct _Build_index_tuple
|
struct _Build_index_tuple
|
||||||
|
: _Itup_cat<typename _Build_index_tuple<_Num / 2>::__type,
|
||||||
|
typename _Build_index_tuple<_Num - _Num / 2>::__type>
|
||||||
|
{ };
|
||||||
|
|
||||||
|
template<>
|
||||||
|
struct _Build_index_tuple<1>
|
||||||
{
|
{
|
||||||
typedef typename _Build_index_tuple<_Num - 1>::__type::__next __type;
|
typedef _Index_tuple<0> __type;
|
||||||
};
|
};
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue