IxParameter.h 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  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. #ifdef _QX_ENABLE_QT_NETWORK
  32. #ifndef _IX_SERVICE_PARAMETER_H_
  33. #define _IX_SERVICE_PARAMETER_H_
  34. #ifdef _MSC_VER
  35. #pragma once
  36. #endif
  37. /*!
  38. * \file IxParameter.h
  39. * \author Lionel Marty
  40. * \ingroup QxService
  41. * \brief Common interface for all parameters transfered by QxService module of QxOrm library
  42. */
  43. #include <QtCore/qdatastream.h>
  44. #ifndef _QX_NO_JSON
  45. #include <QtCore/qjsonvalue.h>
  46. #endif // _QX_NO_JSON
  47. #include <QxRegister/QxRegisterInternalHelper.h>
  48. namespace qx {
  49. namespace service {
  50. class IxParameter;
  51. } // namespace service
  52. } // namespace qx
  53. QX_DLL_EXPORT QDataStream & operator<< (QDataStream & stream, const qx::service::IxParameter & t) QX_USED;
  54. QX_DLL_EXPORT QDataStream & operator>> (QDataStream & stream, qx::service::IxParameter & t) QX_USED;
  55. namespace qx {
  56. namespace service {
  57. /*!
  58. * \ingroup QxService
  59. * \brief qx::service::IxParameter : common interface for all parameters transfered by QxService module of QxOrm library
  60. *
  61. * <a href="https://www.qxorm.com/qxorm_en/tutorial_2.html" target="_blank">Click here to access to a tutorial to explain how to work with QxService module.</a>
  62. */
  63. class QX_DLL_EXPORT IxParameter
  64. {
  65. friend QX_DLL_EXPORT QDataStream & ::operator<< (QDataStream & stream, const qx::service::IxParameter & t);
  66. friend QX_DLL_EXPORT QDataStream & ::operator>> (QDataStream & stream, qx::service::IxParameter & t);
  67. public:
  68. IxParameter();
  69. virtual ~IxParameter();
  70. // Need to override these methods only if you are using 'qx::service::QxConnect::serialization_qt' type (based on QDataStream) or 'qx::service::QxConnect::serialization_json' type (based on QJson engine)
  71. // You can use QX_SERVICE_IX_PARAMETER_SERIALIZATION_HPP and QX_SERVICE_IX_PARAMETER_SERIALIZATION_CPP macro to override
  72. virtual void registerClass() const;
  73. virtual QString getClassName() const;
  74. virtual void save(QDataStream & stream) const;
  75. virtual void load(QDataStream & stream);
  76. #ifndef _QX_NO_JSON
  77. virtual QJsonValue saveToJson() const;
  78. virtual qx_bool loadFromJson(const QJsonValue & val);
  79. #endif // _QX_NO_JSON
  80. };
  81. typedef std::shared_ptr<IxParameter> IxParameter_ptr;
  82. } // namespace service
  83. } // namespace qx
  84. QX_REGISTER_INTERNAL_HELPER_HPP(QX_DLL_EXPORT, qx::service::IxParameter, 0)
  85. #define QX_SERVICE_IX_PARAMETER_QDATASTREAM_HPP(className) \
  86. public: \
  87. virtual void save(QDataStream & stream) const; \
  88. virtual void load(QDataStream & stream);
  89. #define QX_SERVICE_IX_PARAMETER_QDATASTREAM_CPP(className) \
  90. void className::save(QDataStream & stream) const { qx::QxSerializeRegistered< className >::save(stream, (* this)); } \
  91. void className::load(QDataStream & stream) { qx::QxSerializeRegistered< className >::load(stream, (* this)); }
  92. #ifndef _QX_NO_JSON
  93. #define QX_SERVICE_IX_PARAMETER_QJSON_HPP(className) \
  94. public: \
  95. virtual QJsonValue saveToJson() const; \
  96. virtual qx_bool loadFromJson(const QJsonValue & val);
  97. #define QX_SERVICE_IX_PARAMETER_QJSON_CPP(className) \
  98. QJsonValue className::saveToJson() const { return qx::cvt::detail::QxSerializeJsonRegistered< className >::save((* this), ""); } \
  99. qx_bool className::loadFromJson(const QJsonValue & val) { return qx::cvt::detail::QxSerializeJsonRegistered< className >::load(val, (* this), ""); }
  100. #else // _QX_NO_JSON
  101. #define QX_SERVICE_IX_PARAMETER_QJSON_HPP(className) /* Nothing */
  102. #define QX_SERVICE_IX_PARAMETER_QJSON_CPP(className) /* Nothing */
  103. #endif // _QX_NO_JSON
  104. #define QX_SERVICE_IX_PARAMETER_SERIALIZATION_HPP(className) \
  105. QX_SERVICE_IX_PARAMETER_QDATASTREAM_HPP(className) \
  106. QX_SERVICE_IX_PARAMETER_QJSON_HPP(className) \
  107. public: \
  108. virtual void registerClass() const; \
  109. virtual QString getClassName() const;
  110. #define QX_SERVICE_IX_PARAMETER_SERIALIZATION_CPP(className) \
  111. QX_SERVICE_IX_PARAMETER_QDATASTREAM_CPP(className) \
  112. QX_SERVICE_IX_PARAMETER_QJSON_CPP(className) \
  113. void className::registerClass() const { qx::QxClass< className >::getSingleton(); } \
  114. QString className::getClassName() const { return #className; }
  115. #endif // _IX_SERVICE_PARAMETER_H_
  116. #endif // _QX_ENABLE_QT_NETWORK