Tuple.h 54 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749
  1. //
  2. // Tuple.h
  3. //
  4. // $Id: //poco/1.4/Foundation/include/Poco/Tuple.h#1 $
  5. //
  6. // Library: Foundation
  7. // Package: Core
  8. // Module: Tuple
  9. //
  10. // Definition of the Tuple class.
  11. //
  12. // Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH.
  13. // and Contributors.
  14. //
  15. // SPDX-License-Identifier: BSL-1.0
  16. //
  17. #ifndef Foundation_Tuple_INCLUDED
  18. #define Foundation_Tuple_INCLUDED
  19. #include "Poco/Foundation.h"
  20. #include "Poco/TypeList.h"
  21. namespace Poco {
  22. #if defined(_MSC_VER)
  23. #define POCO_TYPEWRAPPER_DEFAULTVALUE(T) TypeWrapper<T>::TYPE()
  24. #else
  25. #define POCO_TYPEWRAPPER_DEFAULTVALUE(T) typename TypeWrapper<T>::TYPE()
  26. #endif
  27. template <class T0,
  28. class T1 = NullTypeList,
  29. class T2 = NullTypeList,
  30. class T3 = NullTypeList,
  31. class T4 = NullTypeList,
  32. class T5 = NullTypeList,
  33. class T6 = NullTypeList,
  34. class T7 = NullTypeList,
  35. class T8 = NullTypeList,
  36. class T9 = NullTypeList,
  37. class T10 = NullTypeList,
  38. class T11 = NullTypeList,
  39. class T12 = NullTypeList,
  40. class T13 = NullTypeList,
  41. class T14 = NullTypeList,
  42. class T15 = NullTypeList,
  43. class T16 = NullTypeList,
  44. class T17 = NullTypeList,
  45. class T18 = NullTypeList,
  46. class T19 = NullTypeList>
  47. struct Tuple
  48. {
  49. typedef typename TypeListType<T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19>::HeadType Type;
  50. enum TupleLengthType
  51. {
  52. length = Type::length
  53. };
  54. Tuple():_data()
  55. {
  56. }
  57. Tuple(typename TypeWrapper<T0>::CONSTTYPE& t0,
  58. typename TypeWrapper<T1>::CONSTTYPE& t1 = POCO_TYPEWRAPPER_DEFAULTVALUE(T1),
  59. typename TypeWrapper<T2>::CONSTTYPE& t2 = POCO_TYPEWRAPPER_DEFAULTVALUE(T2),
  60. typename TypeWrapper<T3>::CONSTTYPE& t3 = POCO_TYPEWRAPPER_DEFAULTVALUE(T3),
  61. typename TypeWrapper<T4>::CONSTTYPE& t4 = POCO_TYPEWRAPPER_DEFAULTVALUE(T4),
  62. typename TypeWrapper<T5>::CONSTTYPE& t5 = POCO_TYPEWRAPPER_DEFAULTVALUE(T5),
  63. typename TypeWrapper<T6>::CONSTTYPE& t6 = POCO_TYPEWRAPPER_DEFAULTVALUE(T6),
  64. typename TypeWrapper<T7>::CONSTTYPE& t7 = POCO_TYPEWRAPPER_DEFAULTVALUE(T7),
  65. typename TypeWrapper<T8>::CONSTTYPE& t8 = POCO_TYPEWRAPPER_DEFAULTVALUE(T8),
  66. typename TypeWrapper<T9>::CONSTTYPE& t9 = POCO_TYPEWRAPPER_DEFAULTVALUE(T9),
  67. typename TypeWrapper<T10>::CONSTTYPE& t10 = POCO_TYPEWRAPPER_DEFAULTVALUE(T10),
  68. typename TypeWrapper<T11>::CONSTTYPE& t11 = POCO_TYPEWRAPPER_DEFAULTVALUE(T11),
  69. typename TypeWrapper<T12>::CONSTTYPE& t12 = POCO_TYPEWRAPPER_DEFAULTVALUE(T12),
  70. typename TypeWrapper<T13>::CONSTTYPE& t13 = POCO_TYPEWRAPPER_DEFAULTVALUE(T13),
  71. typename TypeWrapper<T14>::CONSTTYPE& t14 = POCO_TYPEWRAPPER_DEFAULTVALUE(T14),
  72. typename TypeWrapper<T15>::CONSTTYPE& t15 = POCO_TYPEWRAPPER_DEFAULTVALUE(T15),
  73. typename TypeWrapper<T16>::CONSTTYPE& t16 = POCO_TYPEWRAPPER_DEFAULTVALUE(T16),
  74. typename TypeWrapper<T17>::CONSTTYPE& t17 = POCO_TYPEWRAPPER_DEFAULTVALUE(T17),
  75. typename TypeWrapper<T18>::CONSTTYPE& t18 = POCO_TYPEWRAPPER_DEFAULTVALUE(T18),
  76. typename TypeWrapper<T19>::CONSTTYPE& t19 = POCO_TYPEWRAPPER_DEFAULTVALUE(T19)):
  77. _data(t0, typename TypeListType<T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19>::HeadType
  78. (t1, typename TypeListType<T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19>::HeadType
  79. (t2, typename TypeListType<T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19>::HeadType
  80. (t3, typename TypeListType<T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19>::HeadType
  81. (t4, typename TypeListType<T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19>::HeadType
  82. (t5, typename TypeListType<T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19>::HeadType
  83. (t6, typename TypeListType<T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19>::HeadType
  84. (t7, typename TypeListType<T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19>::HeadType
  85. (t8, typename TypeListType<T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19>::HeadType
  86. (t9, typename TypeListType<T10,T11,T12,T13,T14,T15,T16,T17,T18,T19>::HeadType
  87. (t10, typename TypeListType<T11,T12,T13,T14,T15,T16,T17,T18,T19>::HeadType
  88. (t11, typename TypeListType<T12,T13,T14,T15,T16,T17,T18,T19>::HeadType
  89. (t12, typename TypeListType<T13,T14,T15,T16,T17,T18,T19>::HeadType
  90. (t13, typename TypeListType<T14,T15,T16,T17,T18,T19>::HeadType
  91. (t14, typename TypeListType<T15,T16,T17,T18,T19>::HeadType
  92. (t15, typename TypeListType<T16,T17,T18,T19>::HeadType
  93. (t16, typename TypeListType<T17,T18,T19>::HeadType
  94. (t17, typename TypeListType<T18,T19>::HeadType
  95. (t18, typename TypeListType<T19>::HeadType
  96. (t19, NullTypeList()))))))))))))))))))))
  97. {
  98. }
  99. template <int N>
  100. typename TypeGetter<N, Type>::ConstHeadType& get() const
  101. {
  102. return Getter<N>::template get<typename TypeGetter<N, Type>::HeadType, typename Type::HeadType, typename Type::TailType>(_data);
  103. }
  104. template <int N>
  105. typename TypeGetter<N, Type>::HeadType& get()
  106. {
  107. return Getter<N>::template get<typename TypeGetter<N, Type>::HeadType, typename Type::HeadType, typename Type::TailType>(_data);
  108. }
  109. template <int N>
  110. void set(typename TypeGetter<N, Type>::ConstHeadType& val)
  111. {
  112. Getter<N>::template get<typename TypeGetter<N, Type>::HeadType, typename Type::HeadType, typename Type::TailType>(_data) = val;
  113. }
  114. bool operator == (const Tuple& other) const
  115. {
  116. return _data == other._data;
  117. }
  118. bool operator != (const Tuple& other) const
  119. {
  120. return !(_data == other._data);
  121. }
  122. bool operator < (const Tuple& other) const
  123. {
  124. return _data < other._data;
  125. }
  126. private:
  127. Type _data;
  128. };
  129. template <class T0,
  130. class T1,
  131. class T2,
  132. class T3,
  133. class T4,
  134. class T5,
  135. class T6,
  136. class T7,
  137. class T8,
  138. class T9,
  139. class T10,
  140. class T11,
  141. class T12,
  142. class T13,
  143. class T14,
  144. class T15,
  145. class T16,
  146. class T17,
  147. class T18>
  148. struct Tuple<T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,NullTypeList>
  149. {
  150. typedef typename TypeListType<T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18>::HeadType Type;
  151. enum TupleLengthType
  152. {
  153. length = Type::length
  154. };
  155. Tuple():_data()
  156. {
  157. }
  158. Tuple(typename TypeWrapper<T0>::CONSTTYPE& t0,
  159. typename TypeWrapper<T1>::CONSTTYPE& t1 = POCO_TYPEWRAPPER_DEFAULTVALUE(T1),
  160. typename TypeWrapper<T2>::CONSTTYPE& t2 = POCO_TYPEWRAPPER_DEFAULTVALUE(T2),
  161. typename TypeWrapper<T3>::CONSTTYPE& t3 = POCO_TYPEWRAPPER_DEFAULTVALUE(T3),
  162. typename TypeWrapper<T4>::CONSTTYPE& t4 = POCO_TYPEWRAPPER_DEFAULTVALUE(T4),
  163. typename TypeWrapper<T5>::CONSTTYPE& t5 = POCO_TYPEWRAPPER_DEFAULTVALUE(T5),
  164. typename TypeWrapper<T6>::CONSTTYPE& t6 = POCO_TYPEWRAPPER_DEFAULTVALUE(T6),
  165. typename TypeWrapper<T7>::CONSTTYPE& t7 = POCO_TYPEWRAPPER_DEFAULTVALUE(T7),
  166. typename TypeWrapper<T8>::CONSTTYPE& t8 = POCO_TYPEWRAPPER_DEFAULTVALUE(T8),
  167. typename TypeWrapper<T9>::CONSTTYPE& t9 = POCO_TYPEWRAPPER_DEFAULTVALUE(T9),
  168. typename TypeWrapper<T10>::CONSTTYPE& t10 = POCO_TYPEWRAPPER_DEFAULTVALUE(T10),
  169. typename TypeWrapper<T11>::CONSTTYPE& t11 = POCO_TYPEWRAPPER_DEFAULTVALUE(T11),
  170. typename TypeWrapper<T12>::CONSTTYPE& t12 = POCO_TYPEWRAPPER_DEFAULTVALUE(T12),
  171. typename TypeWrapper<T13>::CONSTTYPE& t13 = POCO_TYPEWRAPPER_DEFAULTVALUE(T13),
  172. typename TypeWrapper<T14>::CONSTTYPE& t14 = POCO_TYPEWRAPPER_DEFAULTVALUE(T14),
  173. typename TypeWrapper<T15>::CONSTTYPE& t15 = POCO_TYPEWRAPPER_DEFAULTVALUE(T15),
  174. typename TypeWrapper<T16>::CONSTTYPE& t16 = POCO_TYPEWRAPPER_DEFAULTVALUE(T16),
  175. typename TypeWrapper<T17>::CONSTTYPE& t17 = POCO_TYPEWRAPPER_DEFAULTVALUE(T17),
  176. typename TypeWrapper<T18>::CONSTTYPE& t18 = POCO_TYPEWRAPPER_DEFAULTVALUE(T18)):
  177. _data(t0, typename TypeListType<T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18>::HeadType
  178. (t1, typename TypeListType<T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18>::HeadType
  179. (t2, typename TypeListType<T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18>::HeadType
  180. (t3, typename TypeListType<T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18>::HeadType
  181. (t4, typename TypeListType<T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18>::HeadType
  182. (t5, typename TypeListType<T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18>::HeadType
  183. (t6, typename TypeListType<T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18>::HeadType
  184. (t7, typename TypeListType<T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18>::HeadType
  185. (t8, typename TypeListType<T9,T10,T11,T12,T13,T14,T15,T16,T17,T18>::HeadType
  186. (t9, typename TypeListType<T10,T11,T12,T13,T14,T15,T16,T17,T18>::HeadType
  187. (t10, typename TypeListType<T11,T12,T13,T14,T15,T16,T17,T18>::HeadType
  188. (t11, typename TypeListType<T12,T13,T14,T15,T16,T17,T18>::HeadType
  189. (t12, typename TypeListType<T13,T14,T15,T16,T17,T18>::HeadType
  190. (t13, typename TypeListType<T14,T15,T16,T17,T18>::HeadType
  191. (t14, typename TypeListType<T15,T16,T17,T18>::HeadType
  192. (t15, typename TypeListType<T16,T17,T18>::HeadType
  193. (t16, typename TypeListType<T17,T18>::HeadType
  194. (t17, typename TypeListType<T18>::HeadType
  195. (t18, NullTypeList())))))))))))))))))))
  196. {
  197. }
  198. template <int N>
  199. typename TypeGetter<N, Type>::ConstHeadType& get() const
  200. {
  201. return Getter<N>::template get<typename TypeGetter<N, Type>::HeadType, typename Type::HeadType, typename Type::TailType>(_data);
  202. }
  203. template <int N>
  204. typename TypeGetter<N, Type>::HeadType& get()
  205. {
  206. return Getter<N>::template get<typename TypeGetter<N, Type>::HeadType, typename Type::HeadType, typename Type::TailType>(_data);
  207. }
  208. template <int N>
  209. void set(typename TypeGetter<N, Type>::ConstHeadType& val)
  210. {
  211. Getter<N>::template get<typename TypeGetter<N, Type>::HeadType, typename Type::HeadType, typename Type::TailType>(_data) = val;
  212. }
  213. bool operator == (const Tuple& other) const
  214. {
  215. return _data == other._data;
  216. }
  217. bool operator != (const Tuple& other) const
  218. {
  219. return !(_data == other._data);
  220. }
  221. bool operator < (const Tuple& other) const
  222. {
  223. return _data < other._data;
  224. }
  225. private:
  226. Type _data;
  227. };
  228. template <class T0,
  229. class T1,
  230. class T2,
  231. class T3,
  232. class T4,
  233. class T5,
  234. class T6,
  235. class T7,
  236. class T8,
  237. class T9,
  238. class T10,
  239. class T11,
  240. class T12,
  241. class T13,
  242. class T14,
  243. class T15,
  244. class T16,
  245. class T17>
  246. struct Tuple<T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,NullTypeList>
  247. {
  248. typedef typename TypeListType<T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17>::HeadType Type;
  249. enum TupleLengthType
  250. {
  251. length = Type::length
  252. };
  253. Tuple():_data()
  254. {
  255. }
  256. Tuple(typename TypeWrapper<T0>::CONSTTYPE& t0,
  257. typename TypeWrapper<T1>::CONSTTYPE& t1 = POCO_TYPEWRAPPER_DEFAULTVALUE(T1),
  258. typename TypeWrapper<T2>::CONSTTYPE& t2 = POCO_TYPEWRAPPER_DEFAULTVALUE(T2),
  259. typename TypeWrapper<T3>::CONSTTYPE& t3 = POCO_TYPEWRAPPER_DEFAULTVALUE(T3),
  260. typename TypeWrapper<T4>::CONSTTYPE& t4 = POCO_TYPEWRAPPER_DEFAULTVALUE(T4),
  261. typename TypeWrapper<T5>::CONSTTYPE& t5 = POCO_TYPEWRAPPER_DEFAULTVALUE(T5),
  262. typename TypeWrapper<T6>::CONSTTYPE& t6 = POCO_TYPEWRAPPER_DEFAULTVALUE(T6),
  263. typename TypeWrapper<T7>::CONSTTYPE& t7 = POCO_TYPEWRAPPER_DEFAULTVALUE(T7),
  264. typename TypeWrapper<T8>::CONSTTYPE& t8 = POCO_TYPEWRAPPER_DEFAULTVALUE(T8),
  265. typename TypeWrapper<T9>::CONSTTYPE& t9 = POCO_TYPEWRAPPER_DEFAULTVALUE(T9),
  266. typename TypeWrapper<T10>::CONSTTYPE& t10 = POCO_TYPEWRAPPER_DEFAULTVALUE(T10),
  267. typename TypeWrapper<T11>::CONSTTYPE& t11 = POCO_TYPEWRAPPER_DEFAULTVALUE(T11),
  268. typename TypeWrapper<T12>::CONSTTYPE& t12 = POCO_TYPEWRAPPER_DEFAULTVALUE(T12),
  269. typename TypeWrapper<T13>::CONSTTYPE& t13 = POCO_TYPEWRAPPER_DEFAULTVALUE(T13),
  270. typename TypeWrapper<T14>::CONSTTYPE& t14 = POCO_TYPEWRAPPER_DEFAULTVALUE(T14),
  271. typename TypeWrapper<T15>::CONSTTYPE& t15 = POCO_TYPEWRAPPER_DEFAULTVALUE(T15),
  272. typename TypeWrapper<T16>::CONSTTYPE& t16 = POCO_TYPEWRAPPER_DEFAULTVALUE(T16),
  273. typename TypeWrapper<T17>::CONSTTYPE& t17 = POCO_TYPEWRAPPER_DEFAULTVALUE(T17)):
  274. _data(t0, typename TypeListType<T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17>::HeadType
  275. (t1, typename TypeListType<T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17>::HeadType
  276. (t2, typename TypeListType<T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17>::HeadType
  277. (t3, typename TypeListType<T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17>::HeadType
  278. (t4, typename TypeListType<T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17>::HeadType
  279. (t5, typename TypeListType<T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17>::HeadType
  280. (t6, typename TypeListType<T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17>::HeadType
  281. (t7, typename TypeListType<T8,T9,T10,T11,T12,T13,T14,T15,T16,T17>::HeadType
  282. (t8, typename TypeListType<T9,T10,T11,T12,T13,T14,T15,T16,T17>::HeadType
  283. (t9, typename TypeListType<T10,T11,T12,T13,T14,T15,T16,T17>::HeadType
  284. (t10, typename TypeListType<T11,T12,T13,T14,T15,T16,T17>::HeadType
  285. (t11, typename TypeListType<T12,T13,T14,T15,T16,T17>::HeadType
  286. (t12, typename TypeListType<T13,T14,T15,T16,T17>::HeadType
  287. (t13, typename TypeListType<T14,T15,T16,T17>::HeadType
  288. (t14, typename TypeListType<T15,T16,T17>::HeadType
  289. (t15, typename TypeListType<T16,T17>::HeadType
  290. (t16, typename TypeListType<T17>::HeadType
  291. (t17, NullTypeList()))))))))))))))))))
  292. {
  293. }
  294. template <int N>
  295. typename TypeGetter<N, Type>::ConstHeadType& get() const
  296. {
  297. return Getter<N>::template get<typename TypeGetter<N, Type>::HeadType, typename Type::HeadType, typename Type::TailType>(_data);
  298. }
  299. template <int N>
  300. typename TypeGetter<N, Type>::HeadType& get()
  301. {
  302. return Getter<N>::template get<typename TypeGetter<N, Type>::HeadType, typename Type::HeadType, typename Type::TailType>(_data);
  303. }
  304. template <int N>
  305. void set(typename TypeGetter<N, Type>::ConstHeadType& val)
  306. {
  307. Getter<N>::template get<typename TypeGetter<N, Type>::HeadType, typename Type::HeadType, typename Type::TailType>(_data) = val;
  308. }
  309. bool operator == (const Tuple& other) const
  310. {
  311. return _data == other._data;
  312. }
  313. bool operator != (const Tuple& other) const
  314. {
  315. return !(_data == other._data);
  316. }
  317. bool operator < (const Tuple& other) const
  318. {
  319. return _data < other._data;
  320. }
  321. private:
  322. Type _data;
  323. };
  324. template <class T0,
  325. class T1,
  326. class T2,
  327. class T3,
  328. class T4,
  329. class T5,
  330. class T6,
  331. class T7,
  332. class T8,
  333. class T9,
  334. class T10,
  335. class T11,
  336. class T12,
  337. class T13,
  338. class T14,
  339. class T15,
  340. class T16>
  341. struct Tuple<T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,NullTypeList>
  342. {
  343. typedef typename TypeListType<T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16>::HeadType Type;
  344. enum TupleLengthType
  345. {
  346. length = Type::length
  347. };
  348. Tuple():_data()
  349. {
  350. }
  351. Tuple(typename TypeWrapper<T0>::CONSTTYPE& t0,
  352. typename TypeWrapper<T1>::CONSTTYPE& t1 = POCO_TYPEWRAPPER_DEFAULTVALUE(T1),
  353. typename TypeWrapper<T2>::CONSTTYPE& t2 = POCO_TYPEWRAPPER_DEFAULTVALUE(T2),
  354. typename TypeWrapper<T3>::CONSTTYPE& t3 = POCO_TYPEWRAPPER_DEFAULTVALUE(T3),
  355. typename TypeWrapper<T4>::CONSTTYPE& t4 = POCO_TYPEWRAPPER_DEFAULTVALUE(T4),
  356. typename TypeWrapper<T5>::CONSTTYPE& t5 = POCO_TYPEWRAPPER_DEFAULTVALUE(T5),
  357. typename TypeWrapper<T6>::CONSTTYPE& t6 = POCO_TYPEWRAPPER_DEFAULTVALUE(T6),
  358. typename TypeWrapper<T7>::CONSTTYPE& t7 = POCO_TYPEWRAPPER_DEFAULTVALUE(T7),
  359. typename TypeWrapper<T8>::CONSTTYPE& t8 = POCO_TYPEWRAPPER_DEFAULTVALUE(T8),
  360. typename TypeWrapper<T9>::CONSTTYPE& t9 = POCO_TYPEWRAPPER_DEFAULTVALUE(T9),
  361. typename TypeWrapper<T10>::CONSTTYPE& t10 = POCO_TYPEWRAPPER_DEFAULTVALUE(T10),
  362. typename TypeWrapper<T11>::CONSTTYPE& t11 = POCO_TYPEWRAPPER_DEFAULTVALUE(T11),
  363. typename TypeWrapper<T12>::CONSTTYPE& t12 = POCO_TYPEWRAPPER_DEFAULTVALUE(T12),
  364. typename TypeWrapper<T13>::CONSTTYPE& t13 = POCO_TYPEWRAPPER_DEFAULTVALUE(T13),
  365. typename TypeWrapper<T14>::CONSTTYPE& t14 = POCO_TYPEWRAPPER_DEFAULTVALUE(T14),
  366. typename TypeWrapper<T15>::CONSTTYPE& t15 = POCO_TYPEWRAPPER_DEFAULTVALUE(T15),
  367. typename TypeWrapper<T16>::CONSTTYPE& t16 = POCO_TYPEWRAPPER_DEFAULTVALUE(T16)):
  368. _data(t0, typename TypeListType<T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16>::HeadType
  369. (t1, typename TypeListType<T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16>::HeadType
  370. (t2, typename TypeListType<T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16>::HeadType
  371. (t3, typename TypeListType<T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16>::HeadType
  372. (t4, typename TypeListType<T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16>::HeadType
  373. (t5, typename TypeListType<T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16>::HeadType
  374. (t6, typename TypeListType<T7,T8,T9,T10,T11,T12,T13,T14,T15,T16>::HeadType
  375. (t7, typename TypeListType<T8,T9,T10,T11,T12,T13,T14,T15,T16>::HeadType
  376. (t8, typename TypeListType<T9,T10,T11,T12,T13,T14,T15,T16>::HeadType
  377. (t9, typename TypeListType<T10,T11,T12,T13,T14,T15,T16>::HeadType
  378. (t10, typename TypeListType<T11,T12,T13,T14,T15,T16>::HeadType
  379. (t11, typename TypeListType<T12,T13,T14,T15,T16>::HeadType
  380. (t12, typename TypeListType<T13,T14,T15,T16>::HeadType
  381. (t13, typename TypeListType<T14,T15,T16>::HeadType
  382. (t14, typename TypeListType<T15,T16>::HeadType
  383. (t15, typename TypeListType<T16>::HeadType
  384. (t16, NullTypeList())))))))))))))))))
  385. {
  386. }
  387. template <int N>
  388. typename TypeGetter<N, Type>::ConstHeadType& get() const
  389. {
  390. return Getter<N>::template get<typename TypeGetter<N, Type>::HeadType, typename Type::HeadType, typename Type::TailType>(_data);
  391. }
  392. template <int N>
  393. typename TypeGetter<N, Type>::HeadType& get()
  394. {
  395. return Getter<N>::template get<typename TypeGetter<N, Type>::HeadType, typename Type::HeadType, typename Type::TailType>(_data);
  396. }
  397. template <int N>
  398. void set(typename TypeGetter<N, Type>::ConstHeadType& val)
  399. {
  400. Getter<N>::template get<typename TypeGetter<N, Type>::HeadType, typename Type::HeadType, typename Type::TailType>(_data) = val;
  401. }
  402. bool operator == (const Tuple& other) const
  403. {
  404. return _data == other._data;
  405. }
  406. bool operator != (const Tuple& other) const
  407. {
  408. return !(_data == other._data);
  409. }
  410. bool operator < (const Tuple& other) const
  411. {
  412. return _data < other._data;
  413. }
  414. private:
  415. Type _data;
  416. };
  417. template <class T0,
  418. class T1,
  419. class T2,
  420. class T3,
  421. class T4,
  422. class T5,
  423. class T6,
  424. class T7,
  425. class T8,
  426. class T9,
  427. class T10,
  428. class T11,
  429. class T12,
  430. class T13,
  431. class T14,
  432. class T15>
  433. struct Tuple<T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,NullTypeList>
  434. {
  435. typedef typename TypeListType<T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15>::HeadType Type;
  436. enum TupleLengthType
  437. {
  438. length = Type::length
  439. };
  440. Tuple():_data()
  441. {
  442. }
  443. Tuple(typename TypeWrapper<T0>::CONSTTYPE& t0,
  444. typename TypeWrapper<T1>::CONSTTYPE& t1 = POCO_TYPEWRAPPER_DEFAULTVALUE(T1),
  445. typename TypeWrapper<T2>::CONSTTYPE& t2 = POCO_TYPEWRAPPER_DEFAULTVALUE(T2),
  446. typename TypeWrapper<T3>::CONSTTYPE& t3 = POCO_TYPEWRAPPER_DEFAULTVALUE(T3),
  447. typename TypeWrapper<T4>::CONSTTYPE& t4 = POCO_TYPEWRAPPER_DEFAULTVALUE(T4),
  448. typename TypeWrapper<T5>::CONSTTYPE& t5 = POCO_TYPEWRAPPER_DEFAULTVALUE(T5),
  449. typename TypeWrapper<T6>::CONSTTYPE& t6 = POCO_TYPEWRAPPER_DEFAULTVALUE(T6),
  450. typename TypeWrapper<T7>::CONSTTYPE& t7 = POCO_TYPEWRAPPER_DEFAULTVALUE(T7),
  451. typename TypeWrapper<T8>::CONSTTYPE& t8 = POCO_TYPEWRAPPER_DEFAULTVALUE(T8),
  452. typename TypeWrapper<T9>::CONSTTYPE& t9 = POCO_TYPEWRAPPER_DEFAULTVALUE(T9),
  453. typename TypeWrapper<T10>::CONSTTYPE& t10 = POCO_TYPEWRAPPER_DEFAULTVALUE(T10),
  454. typename TypeWrapper<T11>::CONSTTYPE& t11 = POCO_TYPEWRAPPER_DEFAULTVALUE(T11),
  455. typename TypeWrapper<T12>::CONSTTYPE& t12 = POCO_TYPEWRAPPER_DEFAULTVALUE(T12),
  456. typename TypeWrapper<T13>::CONSTTYPE& t13 = POCO_TYPEWRAPPER_DEFAULTVALUE(T13),
  457. typename TypeWrapper<T14>::CONSTTYPE& t14 = POCO_TYPEWRAPPER_DEFAULTVALUE(T14),
  458. typename TypeWrapper<T15>::CONSTTYPE& t15 = POCO_TYPEWRAPPER_DEFAULTVALUE(T15)):
  459. _data(t0, typename TypeListType<T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15>::HeadType
  460. (t1, typename TypeListType<T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15>::HeadType
  461. (t2, typename TypeListType<T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15>::HeadType
  462. (t3, typename TypeListType<T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15>::HeadType
  463. (t4, typename TypeListType<T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15>::HeadType
  464. (t5, typename TypeListType<T6,T7,T8,T9,T10,T11,T12,T13,T14,T15>::HeadType
  465. (t6, typename TypeListType<T7,T8,T9,T10,T11,T12,T13,T14,T15>::HeadType
  466. (t7, typename TypeListType<T8,T9,T10,T11,T12,T13,T14,T15>::HeadType
  467. (t8, typename TypeListType<T9,T10,T11,T12,T13,T14,T15>::HeadType
  468. (t9, typename TypeListType<T10,T11,T12,T13,T14,T15>::HeadType
  469. (t10, typename TypeListType<T11,T12,T13,T14,T15>::HeadType
  470. (t11, typename TypeListType<T12,T13,T14,T15>::HeadType
  471. (t12, typename TypeListType<T13,T14,T15>::HeadType
  472. (t13, typename TypeListType<T14,T15>::HeadType
  473. (t14, typename TypeListType<T15>::HeadType
  474. (t15, NullTypeList()))))))))))))))))
  475. {
  476. }
  477. template <int N>
  478. typename TypeGetter<N, Type>::ConstHeadType& get() const
  479. {
  480. return Getter<N>::template get<typename TypeGetter<N, Type>::HeadType, typename Type::HeadType, typename Type::TailType>(_data);
  481. }
  482. template <int N>
  483. typename TypeGetter<N, Type>::HeadType& get()
  484. {
  485. return Getter<N>::template get<typename TypeGetter<N, Type>::HeadType, typename Type::HeadType, typename Type::TailType>(_data);
  486. }
  487. template <int N>
  488. void set(typename TypeGetter<N, Type>::ConstHeadType& val)
  489. {
  490. Getter<N>::template get<typename TypeGetter<N, Type>::HeadType, typename Type::HeadType, typename Type::TailType>(_data) = val;
  491. }
  492. bool operator == (const Tuple& other) const
  493. {
  494. return _data == other._data;
  495. }
  496. bool operator != (const Tuple& other) const
  497. {
  498. return !(_data == other._data);
  499. }
  500. bool operator < (const Tuple& other) const
  501. {
  502. return _data < other._data;
  503. }
  504. private:
  505. Type _data;
  506. };
  507. template <class T0,
  508. class T1,
  509. class T2,
  510. class T3,
  511. class T4,
  512. class T5,
  513. class T6,
  514. class T7,
  515. class T8,
  516. class T9,
  517. class T10,
  518. class T11,
  519. class T12,
  520. class T13,
  521. class T14>
  522. struct Tuple<T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,NullTypeList>
  523. {
  524. typedef typename TypeListType<T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14>::HeadType Type;
  525. enum TupleLengthType
  526. {
  527. length = Type::length
  528. };
  529. Tuple():_data()
  530. {
  531. }
  532. Tuple(typename TypeWrapper<T0>::CONSTTYPE& t0,
  533. typename TypeWrapper<T1>::CONSTTYPE& t1 = POCO_TYPEWRAPPER_DEFAULTVALUE(T1),
  534. typename TypeWrapper<T2>::CONSTTYPE& t2 = POCO_TYPEWRAPPER_DEFAULTVALUE(T2),
  535. typename TypeWrapper<T3>::CONSTTYPE& t3 = POCO_TYPEWRAPPER_DEFAULTVALUE(T3),
  536. typename TypeWrapper<T4>::CONSTTYPE& t4 = POCO_TYPEWRAPPER_DEFAULTVALUE(T4),
  537. typename TypeWrapper<T5>::CONSTTYPE& t5 = POCO_TYPEWRAPPER_DEFAULTVALUE(T5),
  538. typename TypeWrapper<T6>::CONSTTYPE& t6 = POCO_TYPEWRAPPER_DEFAULTVALUE(T6),
  539. typename TypeWrapper<T7>::CONSTTYPE& t7 = POCO_TYPEWRAPPER_DEFAULTVALUE(T7),
  540. typename TypeWrapper<T8>::CONSTTYPE& t8 = POCO_TYPEWRAPPER_DEFAULTVALUE(T8),
  541. typename TypeWrapper<T9>::CONSTTYPE& t9 = POCO_TYPEWRAPPER_DEFAULTVALUE(T9),
  542. typename TypeWrapper<T10>::CONSTTYPE& t10 = POCO_TYPEWRAPPER_DEFAULTVALUE(T10),
  543. typename TypeWrapper<T11>::CONSTTYPE& t11 = POCO_TYPEWRAPPER_DEFAULTVALUE(T11),
  544. typename TypeWrapper<T12>::CONSTTYPE& t12 = POCO_TYPEWRAPPER_DEFAULTVALUE(T12),
  545. typename TypeWrapper<T13>::CONSTTYPE& t13 = POCO_TYPEWRAPPER_DEFAULTVALUE(T13),
  546. typename TypeWrapper<T14>::CONSTTYPE& t14 = POCO_TYPEWRAPPER_DEFAULTVALUE(T14)):
  547. _data(t0, typename TypeListType<T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14>::HeadType
  548. (t1, typename TypeListType<T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14>::HeadType
  549. (t2, typename TypeListType<T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14>::HeadType
  550. (t3, typename TypeListType<T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14>::HeadType
  551. (t4, typename TypeListType<T5,T6,T7,T8,T9,T10,T11,T12,T13,T14>::HeadType
  552. (t5, typename TypeListType<T6,T7,T8,T9,T10,T11,T12,T13,T14>::HeadType
  553. (t6, typename TypeListType<T7,T8,T9,T10,T11,T12,T13,T14>::HeadType
  554. (t7, typename TypeListType<T8,T9,T10,T11,T12,T13,T14>::HeadType
  555. (t8, typename TypeListType<T9,T10,T11,T12,T13,T14>::HeadType
  556. (t9, typename TypeListType<T10,T11,T12,T13,T14>::HeadType
  557. (t10, typename TypeListType<T11,T12,T13,T14>::HeadType
  558. (t11, typename TypeListType<T12,T13,T14>::HeadType
  559. (t12, typename TypeListType<T13,T14>::HeadType
  560. (t13, typename TypeListType<T14>::HeadType
  561. (t14, NullTypeList())))))))))))))))
  562. {
  563. }
  564. template <int N>
  565. typename TypeGetter<N, Type>::ConstHeadType& get() const
  566. {
  567. return Getter<N>::template get<typename TypeGetter<N, Type>::HeadType, typename Type::HeadType, typename Type::TailType>(_data);
  568. }
  569. template <int N>
  570. typename TypeGetter<N, Type>::HeadType& get()
  571. {
  572. return Getter<N>::template get<typename TypeGetter<N, Type>::HeadType, typename Type::HeadType, typename Type::TailType>(_data);
  573. }
  574. template <int N>
  575. void set(typename TypeGetter<N, Type>::ConstHeadType& val)
  576. {
  577. Getter<N>::template get<typename TypeGetter<N, Type>::HeadType, typename Type::HeadType, typename Type::TailType>(_data) = val;
  578. }
  579. bool operator == (const Tuple& other) const
  580. {
  581. return _data == other._data;
  582. }
  583. bool operator != (const Tuple& other) const
  584. {
  585. return !(_data == other._data);
  586. }
  587. bool operator < (const Tuple& other) const
  588. {
  589. return _data < other._data;
  590. }
  591. private:
  592. Type _data;
  593. };
  594. template <class T0,
  595. class T1,
  596. class T2,
  597. class T3,
  598. class T4,
  599. class T5,
  600. class T6,
  601. class T7,
  602. class T8,
  603. class T9,
  604. class T10,
  605. class T11,
  606. class T12,
  607. class T13>
  608. struct Tuple<T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,NullTypeList>
  609. {
  610. typedef typename TypeListType<T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13>::HeadType Type;
  611. enum TupleLengthType
  612. {
  613. length = Type::length
  614. };
  615. Tuple():_data()
  616. {
  617. }
  618. Tuple(typename TypeWrapper<T0>::CONSTTYPE& t0,
  619. typename TypeWrapper<T1>::CONSTTYPE& t1 = POCO_TYPEWRAPPER_DEFAULTVALUE(T1),
  620. typename TypeWrapper<T2>::CONSTTYPE& t2 = POCO_TYPEWRAPPER_DEFAULTVALUE(T2),
  621. typename TypeWrapper<T3>::CONSTTYPE& t3 = POCO_TYPEWRAPPER_DEFAULTVALUE(T3),
  622. typename TypeWrapper<T4>::CONSTTYPE& t4 = POCO_TYPEWRAPPER_DEFAULTVALUE(T4),
  623. typename TypeWrapper<T5>::CONSTTYPE& t5 = POCO_TYPEWRAPPER_DEFAULTVALUE(T5),
  624. typename TypeWrapper<T6>::CONSTTYPE& t6 = POCO_TYPEWRAPPER_DEFAULTVALUE(T6),
  625. typename TypeWrapper<T7>::CONSTTYPE& t7 = POCO_TYPEWRAPPER_DEFAULTVALUE(T7),
  626. typename TypeWrapper<T8>::CONSTTYPE& t8 = POCO_TYPEWRAPPER_DEFAULTVALUE(T8),
  627. typename TypeWrapper<T9>::CONSTTYPE& t9 = POCO_TYPEWRAPPER_DEFAULTVALUE(T9),
  628. typename TypeWrapper<T10>::CONSTTYPE& t10 = POCO_TYPEWRAPPER_DEFAULTVALUE(T10),
  629. typename TypeWrapper<T11>::CONSTTYPE& t11 = POCO_TYPEWRAPPER_DEFAULTVALUE(T11),
  630. typename TypeWrapper<T12>::CONSTTYPE& t12 = POCO_TYPEWRAPPER_DEFAULTVALUE(T12),
  631. typename TypeWrapper<T13>::CONSTTYPE& t13 = POCO_TYPEWRAPPER_DEFAULTVALUE(T13)):
  632. _data(t0, typename TypeListType<T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13>::HeadType
  633. (t1, typename TypeListType<T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13>::HeadType
  634. (t2, typename TypeListType<T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13>::HeadType
  635. (t3, typename TypeListType<T4,T5,T6,T7,T8,T9,T10,T11,T12,T13>::HeadType
  636. (t4, typename TypeListType<T5,T6,T7,T8,T9,T10,T11,T12,T13>::HeadType
  637. (t5, typename TypeListType<T6,T7,T8,T9,T10,T11,T12,T13>::HeadType
  638. (t6, typename TypeListType<T7,T8,T9,T10,T11,T12,T13>::HeadType
  639. (t7, typename TypeListType<T8,T9,T10,T11,T12,T13>::HeadType
  640. (t8, typename TypeListType<T9,T10,T11,T12,T13>::HeadType
  641. (t9, typename TypeListType<T10,T11,T12,T13>::HeadType
  642. (t10, typename TypeListType<T11,T12,T13>::HeadType
  643. (t11, typename TypeListType<T12,T13>::HeadType
  644. (t12, typename TypeListType<T13>::HeadType
  645. (t13, NullTypeList()))))))))))))))
  646. {
  647. }
  648. template <int N>
  649. typename TypeGetter<N, Type>::ConstHeadType& get() const
  650. {
  651. return Getter<N>::template get<typename TypeGetter<N, Type>::HeadType, typename Type::HeadType, typename Type::TailType>(_data);
  652. }
  653. template <int N>
  654. typename TypeGetter<N, Type>::HeadType& get()
  655. {
  656. return Getter<N>::template get<typename TypeGetter<N, Type>::HeadType, typename Type::HeadType, typename Type::TailType>(_data);
  657. }
  658. template <int N>
  659. void set(typename TypeGetter<N, Type>::ConstHeadType& val)
  660. {
  661. Getter<N>::template get<typename TypeGetter<N, Type>::HeadType, typename Type::HeadType, typename Type::TailType>(_data) = val;
  662. }
  663. bool operator == (const Tuple& other) const
  664. {
  665. return _data == other._data;
  666. }
  667. bool operator != (const Tuple& other) const
  668. {
  669. return !(_data == other._data);
  670. }
  671. bool operator < (const Tuple& other) const
  672. {
  673. return _data < other._data;
  674. }
  675. private:
  676. Type _data;
  677. };
  678. template <class T0,
  679. class T1,
  680. class T2,
  681. class T3,
  682. class T4,
  683. class T5,
  684. class T6,
  685. class T7,
  686. class T8,
  687. class T9,
  688. class T10,
  689. class T11,
  690. class T12>
  691. struct Tuple<T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12, NullTypeList>
  692. {
  693. typedef typename TypeListType<T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12>::HeadType Type;
  694. enum TupleLengthType
  695. {
  696. length = Type::length
  697. };
  698. Tuple():_data()
  699. {
  700. }
  701. Tuple(typename TypeWrapper<T0>::CONSTTYPE& t0,
  702. typename TypeWrapper<T1>::CONSTTYPE& t1 = POCO_TYPEWRAPPER_DEFAULTVALUE(T1),
  703. typename TypeWrapper<T2>::CONSTTYPE& t2 = POCO_TYPEWRAPPER_DEFAULTVALUE(T2),
  704. typename TypeWrapper<T3>::CONSTTYPE& t3 = POCO_TYPEWRAPPER_DEFAULTVALUE(T3),
  705. typename TypeWrapper<T4>::CONSTTYPE& t4 = POCO_TYPEWRAPPER_DEFAULTVALUE(T4),
  706. typename TypeWrapper<T5>::CONSTTYPE& t5 = POCO_TYPEWRAPPER_DEFAULTVALUE(T5),
  707. typename TypeWrapper<T6>::CONSTTYPE& t6 = POCO_TYPEWRAPPER_DEFAULTVALUE(T6),
  708. typename TypeWrapper<T7>::CONSTTYPE& t7 = POCO_TYPEWRAPPER_DEFAULTVALUE(T7),
  709. typename TypeWrapper<T8>::CONSTTYPE& t8 = POCO_TYPEWRAPPER_DEFAULTVALUE(T8),
  710. typename TypeWrapper<T9>::CONSTTYPE& t9 = POCO_TYPEWRAPPER_DEFAULTVALUE(T9),
  711. typename TypeWrapper<T10>::CONSTTYPE& t10 = POCO_TYPEWRAPPER_DEFAULTVALUE(T10),
  712. typename TypeWrapper<T11>::CONSTTYPE& t11 = POCO_TYPEWRAPPER_DEFAULTVALUE(T11),
  713. typename TypeWrapper<T12>::CONSTTYPE& t12 = POCO_TYPEWRAPPER_DEFAULTVALUE(T12)):
  714. _data(t0, typename TypeListType<T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12>::HeadType
  715. (t1, typename TypeListType<T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12>::HeadType
  716. (t2, typename TypeListType<T3,T4,T5,T6,T7,T8,T9,T10,T11,T12>::HeadType
  717. (t3, typename TypeListType<T4,T5,T6,T7,T8,T9,T10,T11,T12>::HeadType
  718. (t4, typename TypeListType<T5,T6,T7,T8,T9,T10,T11,T12>::HeadType
  719. (t5, typename TypeListType<T6,T7,T8,T9,T10,T11,T12>::HeadType
  720. (t6, typename TypeListType<T7,T8,T9,T10,T11,T12>::HeadType
  721. (t7, typename TypeListType<T8,T9,T10,T11,T12>::HeadType
  722. (t8, typename TypeListType<T9,T10,T11,T12>::HeadType
  723. (t9, typename TypeListType<T10,T11,T12>::HeadType
  724. (t10, typename TypeListType<T11,T12>::HeadType
  725. (t11, typename TypeListType<T12>::HeadType
  726. (t12, NullTypeList())))))))))))))
  727. {
  728. }
  729. template <int N>
  730. typename TypeGetter<N, Type>::ConstHeadType& get() const
  731. {
  732. return Getter<N>::template get<typename TypeGetter<N, Type>::HeadType, typename Type::HeadType, typename Type::TailType>(_data);
  733. }
  734. template <int N>
  735. typename TypeGetter<N, Type>::HeadType& get()
  736. {
  737. return Getter<N>::template get<typename TypeGetter<N, Type>::HeadType, typename Type::HeadType, typename Type::TailType>(_data);
  738. }
  739. template <int N>
  740. void set(typename TypeGetter<N, Type>::ConstHeadType& val)
  741. {
  742. Getter<N>::template get<typename TypeGetter<N, Type>::HeadType, typename Type::HeadType, typename Type::TailType>(_data) = val;
  743. }
  744. bool operator == (const Tuple& other) const
  745. {
  746. return _data == other._data;
  747. }
  748. bool operator != (const Tuple& other) const
  749. {
  750. return !(_data == other._data);
  751. }
  752. bool operator < (const Tuple& other) const
  753. {
  754. return _data < other._data;
  755. }
  756. private:
  757. Type _data;
  758. };
  759. template <class T0,
  760. class T1,
  761. class T2,
  762. class T3,
  763. class T4,
  764. class T5,
  765. class T6,
  766. class T7,
  767. class T8,
  768. class T9,
  769. class T10,
  770. class T11>
  771. struct Tuple<T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,NullTypeList>
  772. {
  773. typedef typename TypeListType<T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11>::HeadType Type;
  774. enum TupleLengthType
  775. {
  776. length = Type::length
  777. };
  778. Tuple():_data()
  779. {
  780. }
  781. Tuple(typename TypeWrapper<T0>::CONSTTYPE& t0,
  782. typename TypeWrapper<T1>::CONSTTYPE& t1 = POCO_TYPEWRAPPER_DEFAULTVALUE(T1),
  783. typename TypeWrapper<T2>::CONSTTYPE& t2 = POCO_TYPEWRAPPER_DEFAULTVALUE(T2),
  784. typename TypeWrapper<T3>::CONSTTYPE& t3 = POCO_TYPEWRAPPER_DEFAULTVALUE(T3),
  785. typename TypeWrapper<T4>::CONSTTYPE& t4 = POCO_TYPEWRAPPER_DEFAULTVALUE(T4),
  786. typename TypeWrapper<T5>::CONSTTYPE& t5 = POCO_TYPEWRAPPER_DEFAULTVALUE(T5),
  787. typename TypeWrapper<T6>::CONSTTYPE& t6 = POCO_TYPEWRAPPER_DEFAULTVALUE(T6),
  788. typename TypeWrapper<T7>::CONSTTYPE& t7 = POCO_TYPEWRAPPER_DEFAULTVALUE(T7),
  789. typename TypeWrapper<T8>::CONSTTYPE& t8 = POCO_TYPEWRAPPER_DEFAULTVALUE(T8),
  790. typename TypeWrapper<T9>::CONSTTYPE& t9 = POCO_TYPEWRAPPER_DEFAULTVALUE(T9),
  791. typename TypeWrapper<T10>::CONSTTYPE& t10 = POCO_TYPEWRAPPER_DEFAULTVALUE(T10),
  792. typename TypeWrapper<T11>::CONSTTYPE& t11 = POCO_TYPEWRAPPER_DEFAULTVALUE(T11)):
  793. _data(t0, typename TypeListType<T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11>::HeadType
  794. (t1, typename TypeListType<T2,T3,T4,T5,T6,T7,T8,T9,T10,T11>::HeadType
  795. (t2, typename TypeListType<T3,T4,T5,T6,T7,T8,T9,T10,T11>::HeadType
  796. (t3, typename TypeListType<T4,T5,T6,T7,T8,T9,T10,T11>::HeadType
  797. (t4, typename TypeListType<T5,T6,T7,T8,T9,T10,T11>::HeadType
  798. (t5, typename TypeListType<T6,T7,T8,T9,T10,T11>::HeadType
  799. (t6, typename TypeListType<T7,T8,T9,T10,T11>::HeadType
  800. (t7, typename TypeListType<T8,T9,T10,T11>::HeadType
  801. (t8, typename TypeListType<T9,T10,T11>::HeadType
  802. (t9, typename TypeListType<T10,T11>::HeadType
  803. (t10, typename TypeListType<T11>::HeadType
  804. (t11, NullTypeList()))))))))))))
  805. {
  806. }
  807. template <int N>
  808. typename TypeGetter<N, Type>::ConstHeadType& get() const
  809. {
  810. return Getter<N>::template get<typename TypeGetter<N, Type>::HeadType, typename Type::HeadType, typename Type::TailType>(_data);
  811. }
  812. template <int N>
  813. typename TypeGetter<N, Type>::HeadType& get()
  814. {
  815. return Getter<N>::template get<typename TypeGetter<N, Type>::HeadType, typename Type::HeadType, typename Type::TailType>(_data);
  816. }
  817. template <int N>
  818. void set(typename TypeGetter<N, Type>::ConstHeadType& val)
  819. {
  820. Getter<N>::template get<typename TypeGetter<N, Type>::HeadType, typename Type::HeadType, typename Type::TailType>(_data) = val;
  821. }
  822. bool operator == (const Tuple& other) const
  823. {
  824. return _data == other._data;
  825. }
  826. bool operator != (const Tuple& other) const
  827. {
  828. return !(_data == other._data);
  829. }
  830. bool operator < (const Tuple& other) const
  831. {
  832. return _data < other._data;
  833. }
  834. private:
  835. Type _data;
  836. };
  837. template <class T0,
  838. class T1,
  839. class T2,
  840. class T3,
  841. class T4,
  842. class T5,
  843. class T6,
  844. class T7,
  845. class T8,
  846. class T9,
  847. class T10>
  848. struct Tuple<T0, T1,T2,T3,T4,T5,T6,T7,T8,T9,T10, NullTypeList>
  849. {
  850. typedef typename TypeListType<T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10>::HeadType Type;
  851. enum TupleLengthType
  852. {
  853. length = Type::length
  854. };
  855. Tuple():_data()
  856. {
  857. }
  858. Tuple(typename TypeWrapper<T0>::CONSTTYPE& t0,
  859. typename TypeWrapper<T1>::CONSTTYPE& t1 = POCO_TYPEWRAPPER_DEFAULTVALUE(T1),
  860. typename TypeWrapper<T2>::CONSTTYPE& t2 = POCO_TYPEWRAPPER_DEFAULTVALUE(T2),
  861. typename TypeWrapper<T3>::CONSTTYPE& t3 = POCO_TYPEWRAPPER_DEFAULTVALUE(T3),
  862. typename TypeWrapper<T4>::CONSTTYPE& t4 = POCO_TYPEWRAPPER_DEFAULTVALUE(T4),
  863. typename TypeWrapper<T5>::CONSTTYPE& t5 = POCO_TYPEWRAPPER_DEFAULTVALUE(T5),
  864. typename TypeWrapper<T6>::CONSTTYPE& t6 = POCO_TYPEWRAPPER_DEFAULTVALUE(T6),
  865. typename TypeWrapper<T7>::CONSTTYPE& t7 = POCO_TYPEWRAPPER_DEFAULTVALUE(T7),
  866. typename TypeWrapper<T8>::CONSTTYPE& t8 = POCO_TYPEWRAPPER_DEFAULTVALUE(T8),
  867. typename TypeWrapper<T9>::CONSTTYPE& t9 = POCO_TYPEWRAPPER_DEFAULTVALUE(T9),
  868. typename TypeWrapper<T10>::CONSTTYPE& t10 = POCO_TYPEWRAPPER_DEFAULTVALUE(T10)):
  869. _data(t0, typename TypeListType<T1,T2,T3,T4,T5,T6,T7,T8,T9,T10>::HeadType
  870. (t1, typename TypeListType<T2,T3,T4,T5,T6,T7,T8,T9,T10>::HeadType
  871. (t2, typename TypeListType<T3,T4,T5,T6,T7,T8,T9,T10>::HeadType
  872. (t3, typename TypeListType<T4,T5,T6,T7,T8,T9,T10>::HeadType
  873. (t4, typename TypeListType<T5,T6,T7,T8,T9,T10>::HeadType
  874. (t5, typename TypeListType<T6,T7,T8,T9,T10>::HeadType
  875. (t6, typename TypeListType<T7,T8,T9,T10>::HeadType
  876. (t7, typename TypeListType<T8,T9,T10>::HeadType
  877. (t8, typename TypeListType<T9,T10>::HeadType
  878. (t9, typename TypeListType<T10>::HeadType
  879. (t10, NullTypeList())))))))))))
  880. {
  881. }
  882. template <int N>
  883. typename TypeGetter<N, Type>::ConstHeadType& get() const
  884. {
  885. return Getter<N>::template get<typename TypeGetter<N, Type>::HeadType, typename Type::HeadType, typename Type::TailType>(_data);
  886. }
  887. template <int N>
  888. typename TypeGetter<N, Type>::HeadType& get()
  889. {
  890. return Getter<N>::template get<typename TypeGetter<N, Type>::HeadType, typename Type::HeadType, typename Type::TailType>(_data);
  891. }
  892. template <int N>
  893. void set(typename TypeGetter<N, Type>::ConstHeadType& val)
  894. {
  895. Getter<N>::template get<typename TypeGetter<N, Type>::HeadType, typename Type::HeadType, typename Type::TailType>(_data) = val;
  896. }
  897. bool operator == (const Tuple& other) const
  898. {
  899. return _data == other._data;
  900. }
  901. bool operator != (const Tuple& other) const
  902. {
  903. return !(_data == other._data);
  904. }
  905. bool operator < (const Tuple& other) const
  906. {
  907. return _data < other._data;
  908. }
  909. private:
  910. Type _data;
  911. };
  912. template <class T0,
  913. class T1,
  914. class T2,
  915. class T3,
  916. class T4,
  917. class T5,
  918. class T6,
  919. class T7,
  920. class T8,
  921. class T9>
  922. struct Tuple<T0, T1,T2,T3,T4,T5,T6,T7,T8,T9, NullTypeList>
  923. {
  924. typedef typename TypeListType<T0, T1,T2,T3,T4,T5,T6,T7,T8,T9>::HeadType Type;
  925. enum TupleLengthType
  926. {
  927. length = Type::length
  928. };
  929. Tuple():_data()
  930. {
  931. }
  932. Tuple(typename TypeWrapper<T0>::CONSTTYPE& t0,
  933. typename TypeWrapper<T1>::CONSTTYPE& t1 = POCO_TYPEWRAPPER_DEFAULTVALUE(T1),
  934. typename TypeWrapper<T2>::CONSTTYPE& t2 = POCO_TYPEWRAPPER_DEFAULTVALUE(T2),
  935. typename TypeWrapper<T3>::CONSTTYPE& t3 = POCO_TYPEWRAPPER_DEFAULTVALUE(T3),
  936. typename TypeWrapper<T4>::CONSTTYPE& t4 = POCO_TYPEWRAPPER_DEFAULTVALUE(T4),
  937. typename TypeWrapper<T5>::CONSTTYPE& t5 = POCO_TYPEWRAPPER_DEFAULTVALUE(T5),
  938. typename TypeWrapper<T6>::CONSTTYPE& t6 = POCO_TYPEWRAPPER_DEFAULTVALUE(T6),
  939. typename TypeWrapper<T7>::CONSTTYPE& t7 = POCO_TYPEWRAPPER_DEFAULTVALUE(T7),
  940. typename TypeWrapper<T8>::CONSTTYPE& t8 = POCO_TYPEWRAPPER_DEFAULTVALUE(T8),
  941. typename TypeWrapper<T9>::CONSTTYPE& t9 = POCO_TYPEWRAPPER_DEFAULTVALUE(T9)):
  942. _data(t0, typename TypeListType<T1,T2,T3,T4,T5,T6,T7,T8,T9>::HeadType
  943. (t1, typename TypeListType<T2,T3,T4,T5,T6,T7,T8,T9>::HeadType
  944. (t2, typename TypeListType<T3,T4,T5,T6,T7,T8,T9>::HeadType
  945. (t3, typename TypeListType<T4,T5,T6,T7,T8,T9>::HeadType
  946. (t4, typename TypeListType<T5,T6,T7,T8,T9>::HeadType
  947. (t5, typename TypeListType<T6,T7,T8,T9>::HeadType
  948. (t6, typename TypeListType<T7,T8,T9>::HeadType
  949. (t7, typename TypeListType<T8,T9>::HeadType
  950. (t8, typename TypeListType<T9>::HeadType
  951. (t9, NullTypeList()))))))))))
  952. {
  953. }
  954. template <int N>
  955. typename TypeGetter<N, Type>::ConstHeadType& get() const
  956. {
  957. return Getter<N>::template get<typename TypeGetter<N, Type>::HeadType, typename Type::HeadType, typename Type::TailType>(_data);
  958. }
  959. template <int N>
  960. typename TypeGetter<N, Type>::HeadType& get()
  961. {
  962. return Getter<N>::template get<typename TypeGetter<N, Type>::HeadType, typename Type::HeadType, typename Type::TailType>(_data);
  963. }
  964. template <int N>
  965. void set(typename TypeGetter<N, Type>::ConstHeadType& val)
  966. {
  967. Getter<N>::template get<typename TypeGetter<N, Type>::HeadType, typename Type::HeadType, typename Type::TailType>(_data) = val;
  968. }
  969. bool operator == (const Tuple& other) const
  970. {
  971. return _data == other._data;
  972. }
  973. bool operator != (const Tuple& other) const
  974. {
  975. return !(_data == other._data);
  976. }
  977. bool operator < (const Tuple& other) const
  978. {
  979. return _data < other._data;
  980. }
  981. private:
  982. Type _data;
  983. };
  984. template <class T0,
  985. class T1,
  986. class T2,
  987. class T3,
  988. class T4,
  989. class T5,
  990. class T6,
  991. class T7,
  992. class T8>
  993. struct Tuple<T0, T1,T2,T3,T4,T5,T6,T7,T8, NullTypeList>
  994. {
  995. typedef typename TypeListType<T0,T1,T2,T3,T4,T5,T6,T7,T8>::HeadType Type;
  996. enum TupleLengthType
  997. {
  998. length = Type::length
  999. };
  1000. Tuple():_data()
  1001. {
  1002. }
  1003. Tuple(typename TypeWrapper<T0>::CONSTTYPE& t0,
  1004. typename TypeWrapper<T1>::CONSTTYPE& t1 = POCO_TYPEWRAPPER_DEFAULTVALUE(T1),
  1005. typename TypeWrapper<T2>::CONSTTYPE& t2 = POCO_TYPEWRAPPER_DEFAULTVALUE(T2),
  1006. typename TypeWrapper<T3>::CONSTTYPE& t3 = POCO_TYPEWRAPPER_DEFAULTVALUE(T3),
  1007. typename TypeWrapper<T4>::CONSTTYPE& t4 = POCO_TYPEWRAPPER_DEFAULTVALUE(T4),
  1008. typename TypeWrapper<T5>::CONSTTYPE& t5 = POCO_TYPEWRAPPER_DEFAULTVALUE(T5),
  1009. typename TypeWrapper<T6>::CONSTTYPE& t6 = POCO_TYPEWRAPPER_DEFAULTVALUE(T6),
  1010. typename TypeWrapper<T7>::CONSTTYPE& t7 = POCO_TYPEWRAPPER_DEFAULTVALUE(T7),
  1011. typename TypeWrapper<T8>::CONSTTYPE& t8 = POCO_TYPEWRAPPER_DEFAULTVALUE(T8)):
  1012. _data(t0, typename TypeListType<T1,T2,T3,T4,T5,T6,T7,T8>::HeadType
  1013. (t1, typename TypeListType<T2,T3,T4,T5,T6,T7,T8>::HeadType
  1014. (t2, typename TypeListType<T3,T4,T5,T6,T7,T8>::HeadType
  1015. (t3, typename TypeListType<T4,T5,T6,T7,T8>::HeadType
  1016. (t4, typename TypeListType<T5,T6,T7,T8>::HeadType
  1017. (t5, typename TypeListType<T6,T7,T8>::HeadType
  1018. (t6, typename TypeListType<T7,T8>::HeadType
  1019. (t7, typename TypeListType<T8>::HeadType
  1020. (t8, NullTypeList())))))))))
  1021. {
  1022. }
  1023. template <int N>
  1024. typename TypeGetter<N, Type>::ConstHeadType& get() const
  1025. {
  1026. return Getter<N>::template get<typename TypeGetter<N, Type>::HeadType, typename Type::HeadType, typename Type::TailType>(_data);
  1027. }
  1028. template <int N>
  1029. typename TypeGetter<N, Type>::HeadType& get()
  1030. {
  1031. return Getter<N>::template get<typename TypeGetter<N, Type>::HeadType, typename Type::HeadType, typename Type::TailType>(_data);
  1032. }
  1033. template <int N>
  1034. void set(typename TypeGetter<N, Type>::ConstHeadType& val)
  1035. {
  1036. Getter<N>::template get<typename TypeGetter<N, Type>::HeadType, typename Type::HeadType, typename Type::TailType>(_data) = val;
  1037. }
  1038. bool operator == (const Tuple& other) const
  1039. {
  1040. return _data == other._data;
  1041. }
  1042. bool operator != (const Tuple& other) const
  1043. {
  1044. return !(_data == other._data);
  1045. }
  1046. bool operator < (const Tuple& other) const
  1047. {
  1048. return _data < other._data;
  1049. }
  1050. private:
  1051. Type _data;
  1052. };
  1053. template <class T0,
  1054. class T1,
  1055. class T2,
  1056. class T3,
  1057. class T4,
  1058. class T5,
  1059. class T6,
  1060. class T7>
  1061. struct Tuple<T0, T1,T2,T3,T4,T5,T6,T7, NullTypeList>
  1062. {
  1063. typedef typename TypeListType<T0,T1,T2,T3,T4,T5,T6,T7>::HeadType Type;
  1064. enum TupleLengthType
  1065. {
  1066. length = Type::length
  1067. };
  1068. Tuple():_data()
  1069. {
  1070. }
  1071. Tuple(typename TypeWrapper<T0>::CONSTTYPE& t0,
  1072. typename TypeWrapper<T1>::CONSTTYPE& t1 = POCO_TYPEWRAPPER_DEFAULTVALUE(T1),
  1073. typename TypeWrapper<T2>::CONSTTYPE& t2 = POCO_TYPEWRAPPER_DEFAULTVALUE(T2),
  1074. typename TypeWrapper<T3>::CONSTTYPE& t3 = POCO_TYPEWRAPPER_DEFAULTVALUE(T3),
  1075. typename TypeWrapper<T4>::CONSTTYPE& t4 = POCO_TYPEWRAPPER_DEFAULTVALUE(T4),
  1076. typename TypeWrapper<T5>::CONSTTYPE& t5 = POCO_TYPEWRAPPER_DEFAULTVALUE(T5),
  1077. typename TypeWrapper<T6>::CONSTTYPE& t6 = POCO_TYPEWRAPPER_DEFAULTVALUE(T6),
  1078. typename TypeWrapper<T7>::CONSTTYPE& t7 = POCO_TYPEWRAPPER_DEFAULTVALUE(T7)):
  1079. _data(t0, typename TypeListType<T1,T2,T3,T4,T5,T6,T7>::HeadType
  1080. (t1, typename TypeListType<T2,T3,T4,T5,T6,T7>::HeadType
  1081. (t2, typename TypeListType<T3,T4,T5,T6,T7>::HeadType
  1082. (t3, typename TypeListType<T4,T5,T6,T7>::HeadType
  1083. (t4, typename TypeListType<T5,T6,T7>::HeadType
  1084. (t5, typename TypeListType<T6,T7>::HeadType
  1085. (t6, typename TypeListType<T7>::HeadType
  1086. (t7, NullTypeList()))))))))
  1087. {
  1088. }
  1089. template <int N>
  1090. typename TypeGetter<N, Type>::ConstHeadType& get() const
  1091. {
  1092. return Getter<N>::template get<typename TypeGetter<N, Type>::HeadType, typename Type::HeadType, typename Type::TailType>(_data);
  1093. }
  1094. template <int N>
  1095. typename TypeGetter<N, Type>::HeadType& get()
  1096. {
  1097. return Getter<N>::template get<typename TypeGetter<N, Type>::HeadType, typename Type::HeadType, typename Type::TailType>(_data);
  1098. }
  1099. template <int N>
  1100. void set(typename TypeGetter<N, Type>::ConstHeadType& val)
  1101. {
  1102. Getter<N>::template get<typename TypeGetter<N, Type>::HeadType, typename Type::HeadType, typename Type::TailType>(_data) = val;
  1103. }
  1104. bool operator == (const Tuple& other) const
  1105. {
  1106. return _data == other._data;
  1107. }
  1108. bool operator != (const Tuple& other) const
  1109. {
  1110. return !(_data == other._data);
  1111. }
  1112. bool operator < (const Tuple& other) const
  1113. {
  1114. return _data < other._data;
  1115. }
  1116. private:
  1117. Type _data;
  1118. };
  1119. template <class T0,
  1120. class T1,
  1121. class T2,
  1122. class T3,
  1123. class T4,
  1124. class T5,
  1125. class T6>
  1126. struct Tuple<T0, T1,T2,T3,T4,T5,T6, NullTypeList>
  1127. {
  1128. typedef typename TypeListType<T0,T1,T2,T3,T4,T5,T6>::HeadType Type;
  1129. enum TupleLengthType
  1130. {
  1131. length = Type::length
  1132. };
  1133. Tuple():_data()
  1134. {
  1135. }
  1136. Tuple(typename TypeWrapper<T0>::CONSTTYPE& t0,
  1137. typename TypeWrapper<T1>::CONSTTYPE& t1 = POCO_TYPEWRAPPER_DEFAULTVALUE(T1),
  1138. typename TypeWrapper<T2>::CONSTTYPE& t2 = POCO_TYPEWRAPPER_DEFAULTVALUE(T2),
  1139. typename TypeWrapper<T3>::CONSTTYPE& t3 = POCO_TYPEWRAPPER_DEFAULTVALUE(T3),
  1140. typename TypeWrapper<T4>::CONSTTYPE& t4 = POCO_TYPEWRAPPER_DEFAULTVALUE(T4),
  1141. typename TypeWrapper<T5>::CONSTTYPE& t5 = POCO_TYPEWRAPPER_DEFAULTVALUE(T5),
  1142. typename TypeWrapper<T6>::CONSTTYPE& t6 = POCO_TYPEWRAPPER_DEFAULTVALUE(T6)):
  1143. _data(t0, typename TypeListType<T1,T2,T3,T4,T5,T6>::HeadType
  1144. (t1, typename TypeListType<T2,T3,T4,T5,T6>::HeadType
  1145. (t2, typename TypeListType<T3,T4,T5,T6>::HeadType
  1146. (t3, typename TypeListType<T4,T5,T6>::HeadType
  1147. (t4, typename TypeListType<T5,T6>::HeadType
  1148. (t5, typename TypeListType<T6>::HeadType
  1149. (t6, NullTypeList())))))))
  1150. {
  1151. }
  1152. template <int N>
  1153. typename TypeGetter<N, Type>::ConstHeadType& get() const
  1154. {
  1155. return Getter<N>::template get<typename TypeGetter<N, Type>::HeadType, typename Type::HeadType, typename Type::TailType>(_data);
  1156. }
  1157. template <int N>
  1158. typename TypeGetter<N, Type>::HeadType& get()
  1159. {
  1160. return Getter<N>::template get<typename TypeGetter<N, Type>::HeadType, typename Type::HeadType, typename Type::TailType>(_data);
  1161. }
  1162. template <int N>
  1163. void set(typename TypeGetter<N, Type>::ConstHeadType& val)
  1164. {
  1165. Getter<N>::template get<typename TypeGetter<N, Type>::HeadType, typename Type::HeadType, typename Type::TailType>(_data) = val;
  1166. }
  1167. bool operator == (const Tuple& other) const
  1168. {
  1169. return _data == other._data;
  1170. }
  1171. bool operator != (const Tuple& other) const
  1172. {
  1173. return !(_data == other._data);
  1174. }
  1175. bool operator < (const Tuple& other) const
  1176. {
  1177. return _data < other._data;
  1178. }
  1179. private:
  1180. Type _data;
  1181. };
  1182. template <class T0,
  1183. class T1,
  1184. class T2,
  1185. class T3,
  1186. class T4,
  1187. class T5>
  1188. struct Tuple<T0, T1,T2,T3,T4,T5, NullTypeList>
  1189. {
  1190. typedef typename TypeListType<T0,T1,T2,T3,T4,T5>::HeadType Type;
  1191. enum TupleLengthType
  1192. {
  1193. length = Type::length
  1194. };
  1195. Tuple():_data()
  1196. {
  1197. }
  1198. Tuple(typename TypeWrapper<T0>::CONSTTYPE& t0,
  1199. typename TypeWrapper<T1>::CONSTTYPE& t1 = POCO_TYPEWRAPPER_DEFAULTVALUE(T1),
  1200. typename TypeWrapper<T2>::CONSTTYPE& t2 = POCO_TYPEWRAPPER_DEFAULTVALUE(T2),
  1201. typename TypeWrapper<T3>::CONSTTYPE& t3 = POCO_TYPEWRAPPER_DEFAULTVALUE(T3),
  1202. typename TypeWrapper<T4>::CONSTTYPE& t4 = POCO_TYPEWRAPPER_DEFAULTVALUE(T4),
  1203. typename TypeWrapper<T5>::CONSTTYPE& t5 = POCO_TYPEWRAPPER_DEFAULTVALUE(T5)):
  1204. _data(t0, typename TypeListType<T1,T2,T3,T4,T5>::HeadType
  1205. (t1, typename TypeListType<T2,T3,T4,T5>::HeadType
  1206. (t2, typename TypeListType<T3,T4,T5>::HeadType
  1207. (t3, typename TypeListType<T4,T5>::HeadType
  1208. (t4, typename TypeListType<T5>::HeadType
  1209. (t5, NullTypeList()))))))
  1210. {
  1211. }
  1212. template <int N>
  1213. typename TypeGetter<N, Type>::ConstHeadType& get() const
  1214. {
  1215. return Getter<N>::template get<typename TypeGetter<N, Type>::HeadType, typename Type::HeadType, typename Type::TailType>(_data);
  1216. }
  1217. template <int N>
  1218. typename TypeGetter<N, Type>::HeadType& get()
  1219. {
  1220. return Getter<N>::template get<typename TypeGetter<N, Type>::HeadType, typename Type::HeadType, typename Type::TailType>(_data);
  1221. }
  1222. template <int N>
  1223. void set(typename TypeGetter<N, Type>::ConstHeadType& val)
  1224. {
  1225. Getter<N>::template get<typename TypeGetter<N, Type>::HeadType, typename Type::HeadType, typename Type::TailType>(_data) = val;
  1226. }
  1227. bool operator == (const Tuple& other) const
  1228. {
  1229. return _data == other._data;
  1230. }
  1231. bool operator != (const Tuple& other) const
  1232. {
  1233. return !(_data == other._data);
  1234. }
  1235. bool operator < (const Tuple& other) const
  1236. {
  1237. return _data < other._data;
  1238. }
  1239. private:
  1240. Type _data;
  1241. };
  1242. template <class T0,
  1243. class T1,
  1244. class T2,
  1245. class T3,
  1246. class T4>
  1247. struct Tuple<T0, T1,T2,T3,T4, NullTypeList>
  1248. {
  1249. typedef typename TypeListType<T0,T1,T2,T3,T4>::HeadType Type;
  1250. enum TupleLengthType
  1251. {
  1252. length = Type::length
  1253. };
  1254. Tuple():_data()
  1255. {
  1256. }
  1257. Tuple(typename TypeWrapper<T0>::CONSTTYPE& t0,
  1258. typename TypeWrapper<T1>::CONSTTYPE& t1 = POCO_TYPEWRAPPER_DEFAULTVALUE(T1),
  1259. typename TypeWrapper<T2>::CONSTTYPE& t2 = POCO_TYPEWRAPPER_DEFAULTVALUE(T2),
  1260. typename TypeWrapper<T3>::CONSTTYPE& t3 = POCO_TYPEWRAPPER_DEFAULTVALUE(T3),
  1261. typename TypeWrapper<T4>::CONSTTYPE& t4 = POCO_TYPEWRAPPER_DEFAULTVALUE(T4)):
  1262. _data(t0, typename TypeListType<T1,T2,T3,T4>::HeadType
  1263. (t1, typename TypeListType<T2,T3,T4>::HeadType
  1264. (t2, typename TypeListType<T3,T4>::HeadType
  1265. (t3, typename TypeListType<T4>::HeadType
  1266. (t4, NullTypeList())))))
  1267. {
  1268. }
  1269. template <int N>
  1270. typename TypeGetter<N, Type>::ConstHeadType& get() const
  1271. {
  1272. return Getter<N>::template get<typename TypeGetter<N, Type>::HeadType, typename Type::HeadType, typename Type::TailType>(_data);
  1273. }
  1274. template <int N>
  1275. typename TypeGetter<N, Type>::HeadType& get()
  1276. {
  1277. return Getter<N>::template get<typename TypeGetter<N, Type>::HeadType, typename Type::HeadType, typename Type::TailType>(_data);
  1278. }
  1279. template <int N>
  1280. void set(typename TypeGetter<N, Type>::ConstHeadType& val)
  1281. {
  1282. Getter<N>::template get<typename TypeGetter<N, Type>::HeadType, typename Type::HeadType, typename Type::TailType>(_data) = val;
  1283. }
  1284. bool operator == (const Tuple& other) const
  1285. {
  1286. return _data == other._data;
  1287. }
  1288. bool operator != (const Tuple& other) const
  1289. {
  1290. return !(_data == other._data);
  1291. }
  1292. bool operator < (const Tuple& other) const
  1293. {
  1294. return _data < other._data;
  1295. }
  1296. private:
  1297. Type _data;
  1298. };
  1299. template <class T0,
  1300. class T1,
  1301. class T2,
  1302. class T3>
  1303. struct Tuple<T0, T1,T2,T3, NullTypeList>
  1304. {
  1305. typedef typename TypeListType<T0,T1,T2,T3>::HeadType Type;
  1306. enum TupleLengthType
  1307. {
  1308. length = Type::length
  1309. };
  1310. Tuple():_data()
  1311. {
  1312. }
  1313. Tuple(typename TypeWrapper<T0>::CONSTTYPE& t0,
  1314. typename TypeWrapper<T1>::CONSTTYPE& t1 = POCO_TYPEWRAPPER_DEFAULTVALUE(T1),
  1315. typename TypeWrapper<T2>::CONSTTYPE& t2 = POCO_TYPEWRAPPER_DEFAULTVALUE(T2),
  1316. typename TypeWrapper<T3>::CONSTTYPE& t3 = POCO_TYPEWRAPPER_DEFAULTVALUE(T3)):
  1317. _data(t0, typename TypeListType<T1,T2,T3>::HeadType
  1318. (t1, typename TypeListType<T2,T3>::HeadType
  1319. (t2, typename TypeListType<T3>::HeadType
  1320. (t3, NullTypeList()))))
  1321. {
  1322. }
  1323. template <int N>
  1324. typename TypeGetter<N, Type>::ConstHeadType& get() const
  1325. {
  1326. return Getter<N>::template get<typename TypeGetter<N, Type>::HeadType, typename Type::HeadType, typename Type::TailType>(_data);
  1327. }
  1328. template <int N>
  1329. typename TypeGetter<N, Type>::HeadType& get()
  1330. {
  1331. return Getter<N>::template get<typename TypeGetter<N, Type>::HeadType, typename Type::HeadType, typename Type::TailType>(_data);
  1332. }
  1333. template <int N>
  1334. void set(typename TypeGetter<N, Type>::ConstHeadType& val)
  1335. {
  1336. Getter<N>::template get<typename TypeGetter<N, Type>::HeadType, typename Type::HeadType, typename Type::TailType>(_data) = val;
  1337. }
  1338. bool operator == (const Tuple& other) const
  1339. {
  1340. return _data == other._data;
  1341. }
  1342. bool operator != (const Tuple& other) const
  1343. {
  1344. return !(_data == other._data);
  1345. }
  1346. bool operator < (const Tuple& other) const
  1347. {
  1348. return _data < other._data;
  1349. }
  1350. private:
  1351. Type _data;
  1352. };
  1353. template <class T0,
  1354. class T1,
  1355. class T2>
  1356. struct Tuple<T0, T1,T2, NullTypeList>
  1357. {
  1358. typedef typename TypeListType<T0,T1,T2>::HeadType Type;
  1359. enum TupleLengthType
  1360. {
  1361. length = Type::length
  1362. };
  1363. Tuple():_data()
  1364. {
  1365. }
  1366. Tuple(typename TypeWrapper<T0>::CONSTTYPE& t0,
  1367. typename TypeWrapper<T1>::CONSTTYPE& t1 = POCO_TYPEWRAPPER_DEFAULTVALUE(T1),
  1368. typename TypeWrapper<T2>::CONSTTYPE& t2 = POCO_TYPEWRAPPER_DEFAULTVALUE(T2)):
  1369. _data(t0, typename TypeListType<T1,T2>::HeadType
  1370. (t1, typename TypeListType<T2>::HeadType
  1371. (t2, NullTypeList())))
  1372. {
  1373. }
  1374. template <int N>
  1375. typename TypeGetter<N, Type>::ConstHeadType& get() const
  1376. {
  1377. return Getter<N>::template get<typename TypeGetter<N, Type>::HeadType, typename Type::HeadType, typename Type::TailType>(_data);
  1378. }
  1379. template <int N>
  1380. typename TypeGetter<N, Type>::HeadType& get()
  1381. {
  1382. return Getter<N>::template get<typename TypeGetter<N, Type>::HeadType, typename Type::HeadType, typename Type::TailType>(_data);
  1383. }
  1384. template <int N>
  1385. void set(typename TypeGetter<N, Type>::ConstHeadType& val)
  1386. {
  1387. Getter<N>::template get<typename TypeGetter<N, Type>::HeadType, typename Type::HeadType, typename Type::TailType>(_data) = val;
  1388. }
  1389. bool operator == (const Tuple& other) const
  1390. {
  1391. return _data == other._data;
  1392. }
  1393. bool operator != (const Tuple& other) const
  1394. {
  1395. return !(_data == other._data);
  1396. }
  1397. bool operator < (const Tuple& other) const
  1398. {
  1399. return _data < other._data;
  1400. }
  1401. private:
  1402. Type _data;
  1403. };
  1404. template <class T0,
  1405. class T1>
  1406. struct Tuple<T0, T1, NullTypeList>
  1407. {
  1408. typedef typename TypeListType<T0,T1>::HeadType Type;
  1409. enum TupleLengthType
  1410. {
  1411. length = Type::length
  1412. };
  1413. Tuple():_data()
  1414. {
  1415. }
  1416. Tuple(typename TypeWrapper<T0>::CONSTTYPE& t0,
  1417. typename TypeWrapper<T1>::CONSTTYPE& t1 = POCO_TYPEWRAPPER_DEFAULTVALUE(T1)):
  1418. _data(t0, typename TypeListType<T1>::HeadType(t1, NullTypeList()))
  1419. {
  1420. }
  1421. template <int N>
  1422. typename TypeGetter<N, Type>::ConstHeadType& get() const
  1423. {
  1424. return Getter<N>::template get<typename TypeGetter<N, Type>::HeadType, typename Type::HeadType, typename Type::TailType>(_data);
  1425. }
  1426. template <int N>
  1427. typename TypeGetter<N, Type>::HeadType& get()
  1428. {
  1429. return Getter<N>::template get<typename TypeGetter<N, Type>::HeadType, typename Type::HeadType, typename Type::TailType>(_data);
  1430. }
  1431. template <int N>
  1432. void set(typename TypeGetter<N, Type>::ConstHeadType& val)
  1433. {
  1434. Getter<N>::template get<typename TypeGetter<N, Type>::HeadType, typename Type::HeadType, typename Type::TailType>(_data) = val;
  1435. }
  1436. bool operator == (const Tuple& other) const
  1437. {
  1438. return _data == other._data;
  1439. }
  1440. bool operator != (const Tuple& other) const
  1441. {
  1442. return !(_data == other._data);
  1443. }
  1444. bool operator < (const Tuple& other) const
  1445. {
  1446. return _data < other._data;
  1447. }
  1448. private:
  1449. Type _data;
  1450. };
  1451. template <class T0>
  1452. struct Tuple<T0, NullTypeList>
  1453. {
  1454. typedef TypeList<T0, NullTypeList> Type;
  1455. enum TupleLengthType
  1456. {
  1457. length = Type::length
  1458. };
  1459. Tuple():_data()
  1460. {
  1461. }
  1462. Tuple(typename TypeWrapper<T0>::CONSTTYPE& t0):
  1463. _data(t0, NullTypeList())
  1464. {
  1465. }
  1466. template <int N>
  1467. typename TypeGetter<N, Type>::ConstHeadType& get() const
  1468. {
  1469. return Getter<N>::template get<typename TypeGetter<N, Type>::HeadType, typename Type::HeadType, typename Type::TailType>(_data);
  1470. }
  1471. template <int N>
  1472. typename TypeGetter<N, Type>::HeadType& get()
  1473. {
  1474. return Getter<N>::template get<typename TypeGetter<N, Type>::HeadType, typename Type::HeadType, typename Type::TailType>(_data);
  1475. }
  1476. template <int N>
  1477. void set(typename TypeGetter<N, Type>::ConstHeadType& val)
  1478. {
  1479. Getter<N>::template get<typename TypeGetter<N, Type>::HeadType, typename Type::HeadType, typename Type::TailType>(_data) = val;
  1480. }
  1481. bool operator == (const Tuple& other) const
  1482. {
  1483. return _data == other._data;
  1484. }
  1485. bool operator != (const Tuple& other) const
  1486. {
  1487. return !(_data == other._data);
  1488. }
  1489. bool operator < (const Tuple& other) const
  1490. {
  1491. return _data < other._data;
  1492. }
  1493. private:
  1494. Type _data;
  1495. };
  1496. } // namespace Poco
  1497. #endif // Foundation_Tuple_INCLUDED