You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

74 regels
3.6 KiB

  1. #pragma once
  2. #include <boost/hana.hpp>
  3. #include <cpputils/mp/core.h>
  4. #include <cpphibernate/options.h>
  5. #ifdef CPPHIBERNATE_DEBUG
  6. # include <cpputils/logging/global.h>
  7. # define cpphibernate_debug_log(...) log_global_message(debug) << __VA_ARGS__
  8. #else
  9. # define cpphibernate_debug_log(...) do { } while(0)
  10. #endif
  11. #define cpphibernate_equality_comparable() \
  12. template<typename T_other> \
  13. constexpr decltype(auto) operator==(T_other&&) const \
  14. { \
  15. return ::boost::hana::type<::utl::mp::decay_t<decltype(*this)>> { } == \
  16. ::boost::hana::type<::utl::mp::decay_t<T_other>> { }; \
  17. } \
  18. \
  19. template<typename T_other> \
  20. constexpr decltype(auto) operator!=(T_other&&) const \
  21. { \
  22. return ::boost::hana::type<::utl::mp::decay_t<decltype(*this)>> { } != \
  23. ::boost::hana::type<::utl::mp::decay_t<T_other>> { }; \
  24. }
  25. #define cpphibernate_constructable(name, value) \
  26. name() = value
  27. #define cpphibernate_copyable(name, value) \
  28. name(const name&) = value; \
  29. name& operator=(const name&) = value
  30. #define cpphibernate_moveable(name, value) \
  31. name(name&&) = value; \
  32. name& operator=(name&&) = value
  33. #define cpphibernate_define_namespace_beg(parent, name) \
  34. parent { \
  35. namespace name
  36. #define cpphibernate_define_namespace_end(parent) \
  37. } \
  38. parent
  39. #define beg_namespace_cpphibernate namespace cpphibernate
  40. #define end_namespace_cpphibernate
  41. #define beg_namespace_cpphibernate_schema cpphibernate_define_namespace_beg(beg_namespace_cpphibernate, schema)
  42. #define end_namespace_cpphibernate_schema cpphibernate_define_namespace_end(end_namespace_cpphibernate)
  43. #define beg_namespace_cpphibernate_misc cpphibernate_define_namespace_beg(beg_namespace_cpphibernate, misc)
  44. #define end_namespace_cpphibernate_misc cpphibernate_define_namespace_end(end_namespace_cpphibernate)
  45. #define beg_namespace_cpphibernate_modifier cpphibernate_define_namespace_beg(beg_namespace_cpphibernate, modifier)
  46. #define end_namespace_cpphibernate_modifier cpphibernate_define_namespace_end(end_namespace_cpphibernate)
  47. #define beg_namespace_cpphibernate_driver cpphibernate_define_namespace_beg(beg_namespace_cpphibernate, driver)
  48. #define end_namespace_cpphibernate_driver cpphibernate_define_namespace_end(end_namespace_cpphibernate)
  49. #define beg_namespace_cpphibernate_driver_mariadb cpphibernate_define_namespace_beg(beg_namespace_cpphibernate_driver, mariadb_impl)
  50. #define end_namespace_cpphibernate_driver_mariadb cpphibernate_define_namespace_end(end_namespace_cpphibernate_driver)
  51. beg_namespace_cpphibernate
  52. {
  53. namespace mp = ::utl::mp;
  54. namespace hana = ::boost::hana;
  55. }
  56. end_namespace_cpphibernate