QxSerializeQJson_boost_tuple.h 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362
  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_NO_JSON
  32. #ifdef _QX_ENABLE_BOOST
  33. #ifndef _QX_SERIALIZE_QJSON_BOOST_TUPLE_H_
  34. #define _QX_SERIALIZE_QJSON_BOOST_TUPLE_H_
  35. #ifdef _MSC_VER
  36. #pragma once
  37. #endif
  38. /*!
  39. * \file QxSerializeQJson_boost_tuple.h
  40. * \author Lionel Marty
  41. * \ingroup QxSerialize
  42. * \brief Provide a Qt QJson serialization method (save/load) for type boost::tuple<T0, T1, ..., T9>
  43. */
  44. #include <QtCore/qjsonvalue.h>
  45. #include <QtCore/qjsonobject.h>
  46. #include <QtCore/qjsonarray.h>
  47. #include <QxConvert/QxConvert.h>
  48. #include <QxConvert/QxConvert_Impl.h>
  49. namespace qx {
  50. namespace cvt {
  51. namespace detail {
  52. template <typename T0, typename T1>
  53. struct QxConvert_ToJson< boost::tuple<T0, T1> >
  54. {
  55. static inline QJsonValue toJson(const boost::tuple<T0, T1> & t, const QString & format)
  56. {
  57. QJsonArray arr; QJsonValue val;
  58. val = qx::cvt::to_json(boost::get<0>(t), format); arr.append(val);
  59. val = qx::cvt::to_json(boost::get<1>(t), format); arr.append(val);
  60. return QJsonValue(arr);
  61. }
  62. };
  63. template <typename T0, typename T1, typename T2>
  64. struct QxConvert_ToJson< boost::tuple<T0, T1, T2> >
  65. {
  66. static inline QJsonValue toJson(const boost::tuple<T0, T1, T2> & t, const QString & format)
  67. {
  68. QJsonArray arr; QJsonValue val;
  69. val = qx::cvt::to_json(boost::get<0>(t), format); arr.append(val);
  70. val = qx::cvt::to_json(boost::get<1>(t), format); arr.append(val);
  71. val = qx::cvt::to_json(boost::get<2>(t), format); arr.append(val);
  72. return QJsonValue(arr);
  73. }
  74. };
  75. template <typename T0, typename T1, typename T2, typename T3>
  76. struct QxConvert_ToJson< boost::tuple<T0, T1, T2, T3> >
  77. {
  78. static inline QJsonValue toJson(const boost::tuple<T0, T1, T2, T3> & t, const QString & format)
  79. {
  80. QJsonArray arr; QJsonValue val;
  81. val = qx::cvt::to_json(boost::get<0>(t), format); arr.append(val);
  82. val = qx::cvt::to_json(boost::get<1>(t), format); arr.append(val);
  83. val = qx::cvt::to_json(boost::get<2>(t), format); arr.append(val);
  84. val = qx::cvt::to_json(boost::get<3>(t), format); arr.append(val);
  85. return QJsonValue(arr);
  86. }
  87. };
  88. template <typename T0, typename T1, typename T2, typename T3, typename T4>
  89. struct QxConvert_ToJson< boost::tuple<T0, T1, T2, T3, T4> >
  90. {
  91. static inline QJsonValue toJson(const boost::tuple<T0, T1, T2, T3, T4> & t, const QString & format)
  92. {
  93. QJsonArray arr; QJsonValue val;
  94. val = qx::cvt::to_json(boost::get<0>(t), format); arr.append(val);
  95. val = qx::cvt::to_json(boost::get<1>(t), format); arr.append(val);
  96. val = qx::cvt::to_json(boost::get<2>(t), format); arr.append(val);
  97. val = qx::cvt::to_json(boost::get<3>(t), format); arr.append(val);
  98. val = qx::cvt::to_json(boost::get<4>(t), format); arr.append(val);
  99. return QJsonValue(arr);
  100. }
  101. };
  102. template <typename T0, typename T1, typename T2, typename T3, typename T4, typename T5>
  103. struct QxConvert_ToJson< boost::tuple<T0, T1, T2, T3, T4, T5> >
  104. {
  105. static inline QJsonValue toJson(const boost::tuple<T0, T1, T2, T3, T4, T5> & t, const QString & format)
  106. {
  107. QJsonArray arr; QJsonValue val;
  108. val = qx::cvt::to_json(boost::get<0>(t), format); arr.append(val);
  109. val = qx::cvt::to_json(boost::get<1>(t), format); arr.append(val);
  110. val = qx::cvt::to_json(boost::get<2>(t), format); arr.append(val);
  111. val = qx::cvt::to_json(boost::get<3>(t), format); arr.append(val);
  112. val = qx::cvt::to_json(boost::get<4>(t), format); arr.append(val);
  113. val = qx::cvt::to_json(boost::get<5>(t), format); arr.append(val);
  114. return QJsonValue(arr);
  115. }
  116. };
  117. template <typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
  118. struct QxConvert_ToJson< boost::tuple<T0, T1, T2, T3, T4, T5, T6> >
  119. {
  120. static inline QJsonValue toJson(const boost::tuple<T0, T1, T2, T3, T4, T5, T6> & t, const QString & format)
  121. {
  122. QJsonArray arr; QJsonValue val;
  123. val = qx::cvt::to_json(boost::get<0>(t), format); arr.append(val);
  124. val = qx::cvt::to_json(boost::get<1>(t), format); arr.append(val);
  125. val = qx::cvt::to_json(boost::get<2>(t), format); arr.append(val);
  126. val = qx::cvt::to_json(boost::get<3>(t), format); arr.append(val);
  127. val = qx::cvt::to_json(boost::get<4>(t), format); arr.append(val);
  128. val = qx::cvt::to_json(boost::get<5>(t), format); arr.append(val);
  129. val = qx::cvt::to_json(boost::get<6>(t), format); arr.append(val);
  130. return QJsonValue(arr);
  131. }
  132. };
  133. template <typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7>
  134. struct QxConvert_ToJson< boost::tuple<T0, T1, T2, T3, T4, T5, T6, T7> >
  135. {
  136. static inline QJsonValue toJson(const boost::tuple<T0, T1, T2, T3, T4, T5, T6, T7> & t, const QString & format)
  137. {
  138. QJsonArray arr; QJsonValue val;
  139. val = qx::cvt::to_json(boost::get<0>(t), format); arr.append(val);
  140. val = qx::cvt::to_json(boost::get<1>(t), format); arr.append(val);
  141. val = qx::cvt::to_json(boost::get<2>(t), format); arr.append(val);
  142. val = qx::cvt::to_json(boost::get<3>(t), format); arr.append(val);
  143. val = qx::cvt::to_json(boost::get<4>(t), format); arr.append(val);
  144. val = qx::cvt::to_json(boost::get<5>(t), format); arr.append(val);
  145. val = qx::cvt::to_json(boost::get<6>(t), format); arr.append(val);
  146. val = qx::cvt::to_json(boost::get<7>(t), format); arr.append(val);
  147. return QJsonValue(arr);
  148. }
  149. };
  150. template <typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8>
  151. struct QxConvert_ToJson< boost::tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8> >
  152. {
  153. static inline QJsonValue toJson(const boost::tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8> & t, const QString & format)
  154. {
  155. QJsonArray arr; QJsonValue val;
  156. val = qx::cvt::to_json(boost::get<0>(t), format); arr.append(val);
  157. val = qx::cvt::to_json(boost::get<1>(t), format); arr.append(val);
  158. val = qx::cvt::to_json(boost::get<2>(t), format); arr.append(val);
  159. val = qx::cvt::to_json(boost::get<3>(t), format); arr.append(val);
  160. val = qx::cvt::to_json(boost::get<4>(t), format); arr.append(val);
  161. val = qx::cvt::to_json(boost::get<5>(t), format); arr.append(val);
  162. val = qx::cvt::to_json(boost::get<6>(t), format); arr.append(val);
  163. val = qx::cvt::to_json(boost::get<7>(t), format); arr.append(val);
  164. val = qx::cvt::to_json(boost::get<8>(t), format); arr.append(val);
  165. return QJsonValue(arr);
  166. }
  167. };
  168. template <typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9>
  169. struct QxConvert_ToJson< boost::tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9> >
  170. {
  171. static inline QJsonValue toJson(const boost::tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9> & t, const QString & format)
  172. {
  173. QJsonArray arr; QJsonValue val;
  174. val = qx::cvt::to_json(boost::get<0>(t), format); arr.append(val);
  175. val = qx::cvt::to_json(boost::get<1>(t), format); arr.append(val);
  176. val = qx::cvt::to_json(boost::get<2>(t), format); arr.append(val);
  177. val = qx::cvt::to_json(boost::get<3>(t), format); arr.append(val);
  178. val = qx::cvt::to_json(boost::get<4>(t), format); arr.append(val);
  179. val = qx::cvt::to_json(boost::get<5>(t), format); arr.append(val);
  180. val = qx::cvt::to_json(boost::get<6>(t), format); arr.append(val);
  181. val = qx::cvt::to_json(boost::get<7>(t), format); arr.append(val);
  182. val = qx::cvt::to_json(boost::get<8>(t), format); arr.append(val);
  183. val = qx::cvt::to_json(boost::get<9>(t), format); arr.append(val);
  184. return QJsonValue(arr);
  185. }
  186. };
  187. template <typename T0, typename T1>
  188. struct QxConvert_FromJson< boost::tuple<T0, T1> >
  189. {
  190. static inline qx_bool fromJson(const QJsonValue & j, boost::tuple<T0, T1> & t, const QString & format)
  191. {
  192. if (! j.isArray()) { return qx_bool(true); }
  193. QJsonArray arr = j.toArray();
  194. qx::cvt::from_json(arr.at(0), boost::get<0>(t), format);
  195. qx::cvt::from_json(arr.at(1), boost::get<1>(t), format);
  196. return qx_bool(true);
  197. }
  198. };
  199. template <typename T0, typename T1, typename T2>
  200. struct QxConvert_FromJson< boost::tuple<T0, T1, T2> >
  201. {
  202. static inline qx_bool fromJson(const QJsonValue & j, boost::tuple<T0, T1, T2> & t, const QString & format)
  203. {
  204. if (! j.isArray()) { return qx_bool(true); }
  205. QJsonArray arr = j.toArray();
  206. qx::cvt::from_json(arr.at(0), boost::get<0>(t), format);
  207. qx::cvt::from_json(arr.at(1), boost::get<1>(t), format);
  208. qx::cvt::from_json(arr.at(2), boost::get<2>(t), format);
  209. return qx_bool(true);
  210. }
  211. };
  212. template <typename T0, typename T1, typename T2, typename T3>
  213. struct QxConvert_FromJson< boost::tuple<T0, T1, T2, T3> >
  214. {
  215. static inline qx_bool fromJson(const QJsonValue & j, boost::tuple<T0, T1, T2, T3> & t, const QString & format)
  216. {
  217. if (! j.isArray()) { return qx_bool(true); }
  218. QJsonArray arr = j.toArray();
  219. qx::cvt::from_json(arr.at(0), boost::get<0>(t), format);
  220. qx::cvt::from_json(arr.at(1), boost::get<1>(t), format);
  221. qx::cvt::from_json(arr.at(2), boost::get<2>(t), format);
  222. qx::cvt::from_json(arr.at(3), boost::get<3>(t), format);
  223. return qx_bool(true);
  224. }
  225. };
  226. template <typename T0, typename T1, typename T2, typename T3, typename T4>
  227. struct QxConvert_FromJson< boost::tuple<T0, T1, T2, T3, T4> >
  228. {
  229. static inline qx_bool fromJson(const QJsonValue & j, boost::tuple<T0, T1, T2, T3, T4> & t, const QString & format)
  230. {
  231. if (! j.isArray()) { return qx_bool(true); }
  232. QJsonArray arr = j.toArray();
  233. qx::cvt::from_json(arr.at(0), boost::get<0>(t), format);
  234. qx::cvt::from_json(arr.at(1), boost::get<1>(t), format);
  235. qx::cvt::from_json(arr.at(2), boost::get<2>(t), format);
  236. qx::cvt::from_json(arr.at(3), boost::get<3>(t), format);
  237. qx::cvt::from_json(arr.at(4), boost::get<4>(t), format);
  238. return qx_bool(true);
  239. }
  240. };
  241. template <typename T0, typename T1, typename T2, typename T3, typename T4, typename T5>
  242. struct QxConvert_FromJson< boost::tuple<T0, T1, T2, T3, T4, T5> >
  243. {
  244. static inline qx_bool fromJson(const QJsonValue & j, boost::tuple<T0, T1, T2, T3, T4, T5> & t, const QString & format)
  245. {
  246. if (! j.isArray()) { return qx_bool(true); }
  247. QJsonArray arr = j.toArray();
  248. qx::cvt::from_json(arr.at(0), boost::get<0>(t), format);
  249. qx::cvt::from_json(arr.at(1), boost::get<1>(t), format);
  250. qx::cvt::from_json(arr.at(2), boost::get<2>(t), format);
  251. qx::cvt::from_json(arr.at(3), boost::get<3>(t), format);
  252. qx::cvt::from_json(arr.at(4), boost::get<4>(t), format);
  253. qx::cvt::from_json(arr.at(5), boost::get<5>(t), format);
  254. return qx_bool(true);
  255. }
  256. };
  257. template <typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
  258. struct QxConvert_FromJson< boost::tuple<T0, T1, T2, T3, T4, T5, T6> >
  259. {
  260. static inline qx_bool fromJson(const QJsonValue & j, boost::tuple<T0, T1, T2, T3, T4, T5, T6> & t, const QString & format)
  261. {
  262. if (! j.isArray()) { return qx_bool(true); }
  263. QJsonArray arr = j.toArray();
  264. qx::cvt::from_json(arr.at(0), boost::get<0>(t), format);
  265. qx::cvt::from_json(arr.at(1), boost::get<1>(t), format);
  266. qx::cvt::from_json(arr.at(2), boost::get<2>(t), format);
  267. qx::cvt::from_json(arr.at(3), boost::get<3>(t), format);
  268. qx::cvt::from_json(arr.at(4), boost::get<4>(t), format);
  269. qx::cvt::from_json(arr.at(5), boost::get<5>(t), format);
  270. qx::cvt::from_json(arr.at(6), boost::get<6>(t), format);
  271. return qx_bool(true);
  272. }
  273. };
  274. template <typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7>
  275. struct QxConvert_FromJson< boost::tuple<T0, T1, T2, T3, T4, T5, T6, T7> >
  276. {
  277. static inline qx_bool fromJson(const QJsonValue & j, boost::tuple<T0, T1, T2, T3, T4, T5, T6, T7> & t, const QString & format)
  278. {
  279. if (! j.isArray()) { return qx_bool(true); }
  280. QJsonArray arr = j.toArray();
  281. qx::cvt::from_json(arr.at(0), boost::get<0>(t), format);
  282. qx::cvt::from_json(arr.at(1), boost::get<1>(t), format);
  283. qx::cvt::from_json(arr.at(2), boost::get<2>(t), format);
  284. qx::cvt::from_json(arr.at(3), boost::get<3>(t), format);
  285. qx::cvt::from_json(arr.at(4), boost::get<4>(t), format);
  286. qx::cvt::from_json(arr.at(5), boost::get<5>(t), format);
  287. qx::cvt::from_json(arr.at(6), boost::get<6>(t), format);
  288. qx::cvt::from_json(arr.at(7), boost::get<7>(t), format);
  289. return qx_bool(true);
  290. }
  291. };
  292. template <typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8>
  293. struct QxConvert_FromJson< boost::tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8> >
  294. {
  295. static inline qx_bool fromJson(const QJsonValue & j, boost::tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8> & t, const QString & format)
  296. {
  297. if (! j.isArray()) { return qx_bool(true); }
  298. QJsonArray arr = j.toArray();
  299. qx::cvt::from_json(arr.at(0), boost::get<0>(t), format);
  300. qx::cvt::from_json(arr.at(1), boost::get<1>(t), format);
  301. qx::cvt::from_json(arr.at(2), boost::get<2>(t), format);
  302. qx::cvt::from_json(arr.at(3), boost::get<3>(t), format);
  303. qx::cvt::from_json(arr.at(4), boost::get<4>(t), format);
  304. qx::cvt::from_json(arr.at(5), boost::get<5>(t), format);
  305. qx::cvt::from_json(arr.at(6), boost::get<6>(t), format);
  306. qx::cvt::from_json(arr.at(7), boost::get<7>(t), format);
  307. qx::cvt::from_json(arr.at(8), boost::get<8>(t), format);
  308. return qx_bool(true);
  309. }
  310. };
  311. template <typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9>
  312. struct QxConvert_FromJson< boost::tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9> >
  313. {
  314. static inline qx_bool fromJson(const QJsonValue & j, boost::tuple<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9> & t, const QString & format)
  315. {
  316. if (! j.isArray()) { return qx_bool(true); }
  317. QJsonArray arr = j.toArray();
  318. qx::cvt::from_json(arr.at(0), boost::get<0>(t), format);
  319. qx::cvt::from_json(arr.at(1), boost::get<1>(t), format);
  320. qx::cvt::from_json(arr.at(2), boost::get<2>(t), format);
  321. qx::cvt::from_json(arr.at(3), boost::get<3>(t), format);
  322. qx::cvt::from_json(arr.at(4), boost::get<4>(t), format);
  323. qx::cvt::from_json(arr.at(5), boost::get<5>(t), format);
  324. qx::cvt::from_json(arr.at(6), boost::get<6>(t), format);
  325. qx::cvt::from_json(arr.at(7), boost::get<7>(t), format);
  326. qx::cvt::from_json(arr.at(8), boost::get<8>(t), format);
  327. qx::cvt::from_json(arr.at(9), boost::get<9>(t), format);
  328. return qx_bool(true);
  329. }
  330. };
  331. } // namespace detail
  332. } // namespace cvt
  333. } // namespace qx
  334. #endif // _QX_SERIALIZE_QJSON_BOOST_TUPLE_H_
  335. #endif // _QX_ENABLE_BOOST
  336. #endif // _QX_NO_JSON