QxSerializeQDataStream_std_tuple.h 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264
  1. /****************************************************************************
  2. **
  3. ** https://www.qxorm.com/
  4. ** Copyright (C) 2013 Lionel Marty (contact@qxorm.com)
  5. **
  6. ** This file is part of the QxOrm library
  7. **
  8. ** This software is provided 'as-is', without any express or implied
  9. ** warranty. In no event will the authors be held liable for any
  10. ** damages arising from the use of this software
  11. **
  12. ** Commercial Usage
  13. ** Licensees holding valid commercial QxOrm licenses may use this file in
  14. ** accordance with the commercial license agreement provided with the
  15. ** Software or, alternatively, in accordance with the terms contained in
  16. ** a written agreement between you and Lionel Marty
  17. **
  18. ** GNU General Public License Usage
  19. ** Alternatively, this file may be used under the terms of the GNU
  20. ** General Public License version 3.0 as published by the Free Software
  21. ** Foundation and appearing in the file 'license.gpl3.txt' included in the
  22. ** packaging of this file. Please review the following information to
  23. ** ensure the GNU General Public License version 3.0 requirements will be
  24. ** met : http://www.gnu.org/copyleft/gpl.html
  25. **
  26. ** If you are unsure which license is appropriate for your use, or
  27. ** if you have questions regarding the use of this file, please contact :
  28. ** contact@qxorm.com
  29. **
  30. ****************************************************************************/
  31. #ifndef _QX_SERIALIZE_QDATASTREAM_STD_TUPLE_H_
  32. #define _QX_SERIALIZE_QDATASTREAM_STD_TUPLE_H_
  33. #ifdef _MSC_VER
  34. #pragma once
  35. #endif
  36. /*!
  37. * \file QxSerializeQDataStream_std_tuple.h
  38. * \author Lionel Marty
  39. * \ingroup QxSerialize
  40. * \brief Provide a Qt QDataStream serialization method (save/load) for type std::tuple<T0, T1, ..., T9> (C++11 compilation option _QX_CPP_11_TUPLE must be defined)
  41. */
  42. #include <QtCore/qdatastream.h>
  43. template <typename T0, typename T1>
  44. QDataStream & operator<< (QDataStream & stream, const std::tuple<T0, T1> & t)
  45. {
  46. stream << std::get<0>(t);
  47. stream << std::get<1>(t);
  48. return stream;
  49. }
  50. template <typename T0, typename T1, typename T2>
  51. QDataStream & operator<< (QDataStream & stream, const std::tuple<T0, T1, T2> & t)
  52. {
  53. stream << std::get<0>(t);
  54. stream << std::get<1>(t);
  55. stream << std::get<2>(t);
  56. return stream;
  57. }
  58. template <typename T0, typename T1, typename T2, typename T3>
  59. QDataStream & operator<< (QDataStream & stream, const std::tuple<T0, T1, T2, T3> & t)
  60. {
  61. stream << std::get<0>(t);
  62. stream << std::get<1>(t);
  63. stream << std::get<2>(t);
  64. stream << std::get<3>(t);
  65. return stream;
  66. }
  67. template <typename T0, typename T1, typename T2, typename T3, typename T4>
  68. QDataStream & operator<< (QDataStream & stream, const std::tuple<T0, T1, T2, T3, T4> & t)
  69. {
  70. stream << std::get<0>(t);
  71. stream << std::get<1>(t);
  72. stream << std::get<2>(t);
  73. stream << std::get<3>(t);
  74. stream << std::get<4>(t);
  75. return stream;
  76. }
  77. template <typename T0, typename T1, typename T2, typename T3, typename T4, typename T5>
  78. QDataStream & operator<< (QDataStream & stream, const std::tuple<T0, T1, T2, T3, T4, T5> & t)
  79. {
  80. stream << std::get<0>(t);
  81. stream << std::get<1>(t);
  82. stream << std::get<2>(t);
  83. stream << std::get<3>(t);
  84. stream << std::get<4>(t);
  85. stream << std::get<5>(t);
  86. return stream;
  87. }
  88. template <typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
  89. QDataStream & operator<< (QDataStream & stream, const std::tuple<T0, T1, T2, T3, T4, T5, T6> & t)
  90. {
  91. stream << std::get<0>(t);
  92. stream << std::get<1>(t);
  93. stream << std::get<2>(t);
  94. stream << std::get<3>(t);
  95. stream << std::get<4>(t);
  96. stream << std::get<5>(t);
  97. stream << std::get<6>(t);
  98. return stream;
  99. }
  100. template <typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7>
  101. QDataStream & operator<< (QDataStream & stream, const std::tuple<T0, T1, T2, T3, T4, T5, T6, T7> & t)
  102. {
  103. stream << std::get<0>(t);
  104. stream << std::get<1>(t);
  105. stream << std::get<2>(t);
  106. stream << std::get<3>(t);
  107. stream << std::get<4>(t);
  108. stream << std::get<5>(t);
  109. stream << std::get<6>(t);
  110. stream << std::get<7>(t);
  111. return stream;
  112. }
  113. template <typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8>
  114. QDataStream & operator<< (QDataStream & stream, const std::tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8> & t)
  115. {
  116. stream << std::get<0>(t);
  117. stream << std::get<1>(t);
  118. stream << std::get<2>(t);
  119. stream << std::get<3>(t);
  120. stream << std::get<4>(t);
  121. stream << std::get<5>(t);
  122. stream << std::get<6>(t);
  123. stream << std::get<7>(t);
  124. stream << std::get<8>(t);
  125. return stream;
  126. }
  127. template <typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9>
  128. QDataStream & operator<< (QDataStream & stream, const std::tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9> & t)
  129. {
  130. stream << std::get<0>(t);
  131. stream << std::get<1>(t);
  132. stream << std::get<2>(t);
  133. stream << std::get<3>(t);
  134. stream << std::get<4>(t);
  135. stream << std::get<5>(t);
  136. stream << std::get<6>(t);
  137. stream << std::get<7>(t);
  138. stream << std::get<8>(t);
  139. stream << std::get<9>(t);
  140. return stream;
  141. }
  142. template <typename T0, typename T1>
  143. QDataStream & operator>> (QDataStream & stream, std::tuple<T0, T1> & t)
  144. {
  145. stream >> std::get<0>(t);
  146. stream >> std::get<1>(t);
  147. return stream;
  148. }
  149. template <typename T0, typename T1, typename T2>
  150. QDataStream & operator>> (QDataStream & stream, std::tuple<T0, T1, T2> & t)
  151. {
  152. stream >> std::get<0>(t);
  153. stream >> std::get<1>(t);
  154. stream >> std::get<2>(t);
  155. return stream;
  156. }
  157. template <typename T0, typename T1, typename T2, typename T3>
  158. QDataStream & operator>> (QDataStream & stream, std::tuple<T0, T1, T2, T3> & t)
  159. {
  160. stream >> std::get<0>(t);
  161. stream >> std::get<1>(t);
  162. stream >> std::get<2>(t);
  163. stream >> std::get<3>(t);
  164. return stream;
  165. }
  166. template <typename T0, typename T1, typename T2, typename T3, typename T4>
  167. QDataStream & operator>> (QDataStream & stream, std::tuple<T0, T1, T2, T3, T4> & t)
  168. {
  169. stream >> std::get<0>(t);
  170. stream >> std::get<1>(t);
  171. stream >> std::get<2>(t);
  172. stream >> std::get<3>(t);
  173. stream >> std::get<4>(t);
  174. return stream;
  175. }
  176. template <typename T0, typename T1, typename T2, typename T3, typename T4, typename T5>
  177. QDataStream & operator>> (QDataStream & stream, std::tuple<T0, T1, T2, T3, T4, T5> & t)
  178. {
  179. stream >> std::get<0>(t);
  180. stream >> std::get<1>(t);
  181. stream >> std::get<2>(t);
  182. stream >> std::get<3>(t);
  183. stream >> std::get<4>(t);
  184. stream >> std::get<5>(t);
  185. return stream;
  186. }
  187. template <typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
  188. QDataStream & operator>> (QDataStream & stream, std::tuple<T0, T1, T2, T3, T4, T5, T6> & t)
  189. {
  190. stream >> std::get<0>(t);
  191. stream >> std::get<1>(t);
  192. stream >> std::get<2>(t);
  193. stream >> std::get<3>(t);
  194. stream >> std::get<4>(t);
  195. stream >> std::get<5>(t);
  196. stream >> std::get<6>(t);
  197. return stream;
  198. }
  199. template <typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7>
  200. QDataStream & operator>> (QDataStream & stream, std::tuple<T0, T1, T2, T3, T4, T5, T6, T7> & t)
  201. {
  202. stream >> std::get<0>(t);
  203. stream >> std::get<1>(t);
  204. stream >> std::get<2>(t);
  205. stream >> std::get<3>(t);
  206. stream >> std::get<4>(t);
  207. stream >> std::get<5>(t);
  208. stream >> std::get<6>(t);
  209. stream >> std::get<7>(t);
  210. return stream;
  211. }
  212. template <typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8>
  213. QDataStream & operator>> (QDataStream & stream, std::tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8> & t)
  214. {
  215. stream >> std::get<0>(t);
  216. stream >> std::get<1>(t);
  217. stream >> std::get<2>(t);
  218. stream >> std::get<3>(t);
  219. stream >> std::get<4>(t);
  220. stream >> std::get<5>(t);
  221. stream >> std::get<6>(t);
  222. stream >> std::get<7>(t);
  223. stream >> std::get<8>(t);
  224. return stream;
  225. }
  226. template <typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9>
  227. QDataStream & operator>> (QDataStream & stream, std::tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9> & t)
  228. {
  229. stream >> std::get<0>(t);
  230. stream >> std::get<1>(t);
  231. stream >> std::get<2>(t);
  232. stream >> std::get<3>(t);
  233. stream >> std::get<4>(t);
  234. stream >> std::get<5>(t);
  235. stream >> std::get<6>(t);
  236. stream >> std::get<7>(t);
  237. stream >> std::get<8>(t);
  238. stream >> std::get<9>(t);
  239. return stream;
  240. }
  241. #endif // _QX_SERIALIZE_QDATASTREAM_STD_TUPLE_H_