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>
|
template <class Head, class Tail>
|
||||||
struct TypeList;
|
struct TypeList;
|
||||||
|
|
||||||
|
|
||||||
struct NullTypeList
|
struct NullTypeList
|
||||||
{
|
{
|
||||||
enum
|
enum
|
||||||
@ -86,8 +86,8 @@ struct TypeList
|
|||||||
{
|
{
|
||||||
if (this != &tl)
|
if (this != &tl)
|
||||||
{
|
{
|
||||||
TypeList tmp(tl);
|
head = tl.head;
|
||||||
swap(tmp);
|
tail = tl.tail;
|
||||||
}
|
}
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
@ -110,40 +110,54 @@ struct TypeList
|
|||||||
return tail < tl.tail;
|
return tail < tl.tail;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void swap(TypeList& tl)
|
|
||||||
{
|
|
||||||
std::swap(head, tl.head);
|
|
||||||
std::swap(tail, tl.tail);
|
|
||||||
}
|
|
||||||
|
|
||||||
HeadType head;
|
HeadType head;
|
||||||
TailType tail;
|
TailType tail;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
template <typename T0 = NullTypeList,
|
template <typename T0 = NullTypeList,
|
||||||
typename T1 = NullTypeList,
|
typename T1 = NullTypeList,
|
||||||
typename T2 = NullTypeList,
|
typename T2 = NullTypeList,
|
||||||
typename T3 = NullTypeList,
|
typename T3 = NullTypeList,
|
||||||
typename T4 = NullTypeList,
|
typename T4 = NullTypeList,
|
||||||
typename T5 = NullTypeList,
|
typename T5 = NullTypeList,
|
||||||
typename T6 = NullTypeList,
|
typename T6 = NullTypeList,
|
||||||
typename T7 = NullTypeList,
|
typename T7 = NullTypeList,
|
||||||
typename T8 = NullTypeList,
|
typename T8 = NullTypeList,
|
||||||
typename T9 = NullTypeList,
|
typename T9 = NullTypeList,
|
||||||
typename T10 = NullTypeList,
|
typename T10 = NullTypeList,
|
||||||
typename T11 = NullTypeList,
|
typename T11 = NullTypeList,
|
||||||
typename T12 = NullTypeList,
|
typename T12 = NullTypeList,
|
||||||
typename T13 = NullTypeList,
|
typename T13 = NullTypeList,
|
||||||
typename T14 = NullTypeList,
|
typename T14 = NullTypeList,
|
||||||
typename T15 = NullTypeList,
|
typename T15 = NullTypeList,
|
||||||
typename T16 = NullTypeList,
|
typename T16 = NullTypeList,
|
||||||
typename T17 = NullTypeList,
|
typename T17 = NullTypeList,
|
||||||
typename T18 = 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
|
struct TypeListType
|
||||||
/// TypeListType takes 1 - 20 typename arguments.
|
/// TypeListType takes 1 - 40 typename arguments.
|
||||||
/// Usage:
|
/// Usage:
|
||||||
///
|
///
|
||||||
/// TypeListType<T0, T1, ... , Tn>::HeadType typeList;
|
/// TypeListType<T0, T1, ... , Tn>::HeadType typeList;
|
||||||
@ -151,7 +165,11 @@ struct TypeListType
|
|||||||
/// typeList is a TypeList of T0, T1, ... , Tn
|
/// typeList is a TypeList of T0, T1, ... , Tn
|
||||||
{
|
{
|
||||||
private:
|
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:
|
public:
|
||||||
typedef TypeList<T0, TailType> HeadType;
|
typedef TypeList<T0, TailType> HeadType;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user