mirror of
https://github.com/pocoproject/poco.git
synced 2025-03-04 07:27:23 +01:00
fixed GH #2382: Tuple assignment very slow
This commit is contained in:
parent
4a2cc66ec6
commit
7a4f56e74b
@ -32,7 +32,7 @@ namespace Poco {
|
||||
template <class Head, class Tail>
|
||||
struct TypeList;
|
||||
|
||||
|
||||
|
||||
struct NullTypeList
|
||||
{
|
||||
enum
|
||||
@ -86,8 +86,8 @@ struct TypeList
|
||||
{
|
||||
if (this != &tl)
|
||||
{
|
||||
TypeList tmp(tl);
|
||||
swap(tmp);
|
||||
head = tl.head;
|
||||
tail = tl.tail;
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
@ -110,40 +110,54 @@ struct TypeList
|
||||
return tail < tl.tail;
|
||||
return false;
|
||||
}
|
||||
|
||||
void swap(TypeList& tl)
|
||||
{
|
||||
std::swap(head, tl.head);
|
||||
std::swap(tail, tl.tail);
|
||||
}
|
||||
|
||||
HeadType head;
|
||||
TailType tail;
|
||||
};
|
||||
|
||||
|
||||
template <typename T0 = NullTypeList,
|
||||
typename T1 = NullTypeList,
|
||||
template <typename T0 = NullTypeList,
|
||||
typename T1 = NullTypeList,
|
||||
typename T2 = NullTypeList,
|
||||
typename T3 = NullTypeList,
|
||||
typename T4 = NullTypeList,
|
||||
typename T3 = NullTypeList,
|
||||
typename T4 = NullTypeList,
|
||||
typename T5 = NullTypeList,
|
||||
typename T6 = NullTypeList,
|
||||
typename T7 = NullTypeList,
|
||||
typename T6 = NullTypeList,
|
||||
typename T7 = NullTypeList,
|
||||
typename T8 = NullTypeList,
|
||||
typename T9 = NullTypeList,
|
||||
typename T10 = NullTypeList,
|
||||
typename T9 = NullTypeList,
|
||||
typename T10 = NullTypeList,
|
||||
typename T11 = NullTypeList,
|
||||
typename T12 = NullTypeList,
|
||||
typename T13 = NullTypeList,
|
||||
typename T12 = NullTypeList,
|
||||
typename T13 = NullTypeList,
|
||||
typename T14 = NullTypeList,
|
||||
typename T15 = NullTypeList,
|
||||
typename T16 = NullTypeList,
|
||||
typename T15 = NullTypeList,
|
||||
typename T16 = NullTypeList,
|
||||
typename T17 = NullTypeList,
|
||||
typename T18 = NullTypeList,
|
||||
typename T19 = NullTypeList>
|
||||
typename T19 = NullTypeList,
|
||||
typename T20 = NullTypeList,
|
||||
typename T21 = NullTypeList,
|
||||
typename T22 = NullTypeList,
|
||||
typename T23 = NullTypeList,
|
||||
typename T24 = NullTypeList,
|
||||
typename T25 = NullTypeList,
|
||||
typename T26 = NullTypeList,
|
||||
typename T27 = NullTypeList,
|
||||
typename T28 = NullTypeList,
|
||||
typename T29 = NullTypeList,
|
||||
typename T30 = NullTypeList,
|
||||
typename T31 = NullTypeList,
|
||||
typename T32 = NullTypeList,
|
||||
typename T33 = NullTypeList,
|
||||
typename T34 = NullTypeList,
|
||||
typename T35 = NullTypeList,
|
||||
typename T36 = NullTypeList,
|
||||
typename T37 = NullTypeList,
|
||||
typename T38 = NullTypeList,
|
||||
typename T39 = NullTypeList>
|
||||
struct TypeListType
|
||||
/// TypeListType takes 1 - 20 typename arguments.
|
||||
/// TypeListType takes 1 - 40 typename arguments.
|
||||
/// Usage:
|
||||
///
|
||||
/// TypeListType<T0, T1, ... , Tn>::HeadType typeList;
|
||||
@ -151,7 +165,11 @@ struct TypeListType
|
||||
/// typeList is a TypeList of T0, T1, ... , Tn
|
||||
{
|
||||
private:
|
||||
typedef typename TypeListType<T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19>::HeadType TailType;
|
||||
typedef typename
|
||||
TypeListType<T1,T2, T3, T4, T5, T6, T7, T8, T9, T10,
|
||||
T11,T12,T13,T14,T15,T16,T17,T18,T19,T20,
|
||||
T21,T22,T23,T24,T25,T26,T27,T28,T29,T30,
|
||||
T31,T32,T33,T34,T35,T36,T37,T38,T39>::HeadType TailType;
|
||||
|
||||
public:
|
||||
typedef TypeList<T0, TailType> HeadType;
|
||||
|
Loading…
x
Reference in New Issue
Block a user