From 7a4f56e74be85ad2042201704ec7927691efbb6a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=BCnter=20Obiltschnig?= Date: Sat, 22 Jun 2019 14:06:47 +0200 Subject: [PATCH] fixed GH #2382: Tuple assignment very slow --- Foundation/include/Poco/TypeList.h | 66 +++++++++++++++++++----------- 1 file changed, 42 insertions(+), 24 deletions(-) diff --git a/Foundation/include/Poco/TypeList.h b/Foundation/include/Poco/TypeList.h index 5620fa274..352696f8e 100644 --- a/Foundation/include/Poco/TypeList.h +++ b/Foundation/include/Poco/TypeList.h @@ -32,7 +32,7 @@ namespace Poco { template 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 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::HeadType typeList; @@ -151,7 +165,11 @@ struct TypeListType /// typeList is a TypeList of T0, T1, ... , Tn { private: - typedef typename TypeListType::HeadType TailType; + typedef typename + TypeListType::HeadType TailType; public: typedef TypeList HeadType;