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.
 
 
 

73 rivejä
3.6 KiB

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