interval_type_default.hpp 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. /*-----------------------------------------------------------------------------+
  2. Copyright (c) 2010-2010: Joachim Faulhaber
  3. +------------------------------------------------------------------------------+
  4. Distributed under the Boost Software License, Version 1.0.
  5. (See accompanying file LICENCE.txt or copy at
  6. http://www.boost.org/LICENSE_1_0.txt)
  7. +-----------------------------------------------------------------------------*/
  8. #ifndef BOOST_ICL_TYPE_TRAITS_INTERVAL_TYPE_DEFAULT_HPP_JOFA_100403
  9. #define BOOST_ICL_TYPE_TRAITS_INTERVAL_TYPE_DEFAULT_HPP_JOFA_100403
  10. #include <boost/mpl/if.hpp>
  11. #include <boost/icl/detail/design_config.hpp>
  12. #include <boost/icl/continuous_interval.hpp>
  13. #include <boost/icl/discrete_interval.hpp>
  14. #include <boost/icl/right_open_interval.hpp>
  15. #include <boost/icl/left_open_interval.hpp>
  16. #include <boost/icl/closed_interval.hpp>
  17. #include <boost/icl/open_interval.hpp>
  18. #include <boost/icl/type_traits/is_continuous.hpp>
  19. #include <boost/icl/type_traits/is_discrete.hpp>
  20. namespace boost{ namespace icl
  21. {
  22. template <class DomainT, ICL_COMPARE Compare = ICL_COMPARE_INSTANCE(ICL_COMPARE_DEFAULT, DomainT)>
  23. struct interval_type_default
  24. {
  25. #ifdef BOOST_ICL_USE_STATIC_BOUNDED_INTERVALS
  26. typedef
  27. typename mpl::if_< is_discrete<DomainT>
  28. # ifdef BOOST_ICL_DISCRETE_STATIC_INTERVAL_DEFAULT
  29. , BOOST_ICL_DISCRETE_STATIC_INTERVAL_DEFAULT<DomainT,Compare>
  30. # else
  31. , right_open_interval<DomainT,Compare>
  32. # endif
  33. # ifdef BOOST_ICL_CONTINUOUS_STATIC_INTERVAL_DEFAULT
  34. , BOOST_ICL_CONTINUOUS_STATIC_INTERVAL_DEFAULT<DomainT,Compare>
  35. # else
  36. , right_open_interval<DomainT,Compare>
  37. # endif
  38. >::type type;
  39. #else
  40. typedef
  41. typename mpl::if_< is_discrete<DomainT>
  42. , discrete_interval<DomainT,Compare>
  43. , continuous_interval<DomainT,Compare> >::type type;
  44. #endif
  45. };
  46. }} // namespace boost icl
  47. #endif