interval.cpp 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. /*-----------------------------------------------------------------------------+
  2. Interval Container Library
  3. Author: Joachim Faulhaber
  4. Copyright (c) 2007-2010: Joachim Faulhaber
  5. Copyright (c) 1999-2006: Cortex Software GmbH, Kantstrasse 57, Berlin
  6. +------------------------------------------------------------------------------+
  7. Distributed under the Boost Software License, Version 1.0.
  8. (See accompanying file LICENCE.txt or copy at
  9. http://www.boost.org/LICENSE_1_0.txt)
  10. +-----------------------------------------------------------------------------*/
  11. /** Example interval.cpp \file interval.cpp
  12. \brief Intervals for integral and continuous instance types.
  13. Closed and open interval borders.
  14. Much of the library code deals with intervals which are implemented
  15. by interval class templates. This program gives a very short samlpe of
  16. different interval instances.
  17. \include interval_/interval.cpp
  18. */
  19. //[example_interval
  20. #include <iostream>
  21. #include <string>
  22. #include <math.h>
  23. // Dynamically bounded intervals
  24. #include <boost/icl/discrete_interval.hpp>
  25. #include <boost/icl/continuous_interval.hpp>
  26. // Statically bounded intervals
  27. #include <boost/icl/right_open_interval.hpp>
  28. #include <boost/icl/left_open_interval.hpp>
  29. #include <boost/icl/closed_interval.hpp>
  30. #include <boost/icl/open_interval.hpp>
  31. #include "../toytime.hpp"
  32. #include <boost/icl/rational.hpp>
  33. using namespace std;
  34. using namespace boost;
  35. using namespace boost::icl;
  36. int main()
  37. {
  38. cout << ">>Interval Container Library: Sample interval.cpp <<\n";
  39. cout << "----------------------------------------------------\n";
  40. // Class template discrete_interval can be used for discrete data types
  41. // like integers, date and time and other types that have a least steppable
  42. // unit.
  43. discrete_interval<int> int_interval
  44. = construct<discrete_interval<int> >(3, 7, interval_bounds::closed());
  45. // Class template continuous_interval can be used for continuous data types
  46. // like double, boost::rational or strings.
  47. continuous_interval<double> sqrt_interval
  48. = construct<continuous_interval<double> >(1/sqrt(2.0), sqrt(2.0));
  49. //interval_bounds::right_open() is default
  50. continuous_interval<string> city_interval
  51. = construct<continuous_interval<string> >("Barcelona", "Boston", interval_bounds::left_open());
  52. discrete_interval<Time> time_interval
  53. = construct<discrete_interval<Time> >(Time(monday,8,30), Time(monday,17,20),
  54. interval_bounds::open());
  55. cout << "Dynamically bounded intervals:\n";
  56. cout << " discrete_interval<int>: " << int_interval << endl;
  57. cout << "continuous_interval<double>: " << sqrt_interval << " does "
  58. << string(contains(sqrt_interval, sqrt(2.0))?"":"NOT")
  59. << " contain sqrt(2)" << endl;
  60. cout << "continuous_interval<string>: " << city_interval << " does "
  61. << string(contains(city_interval,"Barcelona")?"":"NOT")
  62. << " contain 'Barcelona'" << endl;
  63. cout << "continuous_interval<string>: " << city_interval << " does "
  64. << string(contains(city_interval, "Berlin")?"":"NOT")
  65. << " contain 'Berlin'" << endl;
  66. cout << " discrete_interval<Time>: " << time_interval << "\n\n";
  67. // There are statically bounded interval types with fixed interval borders
  68. right_open_interval<string> fix_interval1; // You will probably use one kind of static intervals
  69. // right_open_intervals are recommended.
  70. closed_interval<unsigned int> fix_interval2; // ... static closed, left_open and open intervals
  71. left_open_interval<float> fix_interval3; // are implemented for sake of completeness but
  72. open_interval<short> fix_interval4; // are of minor practical importance.
  73. right_open_interval<rational<int> > range1(rational<int>(0,1), rational<int>(2,3));
  74. right_open_interval<rational<int> > range2(rational<int>(1,3), rational<int>(1,1));
  75. // This middle third of the unit interval [0,1)
  76. cout << "Statically bounded interval:\n";
  77. cout << "right_open_interval<rational<int>>: " << (range1 & range2) << endl;
  78. return 0;
  79. }
  80. // Program output:
  81. //>>Interval Container Library: Sample interval.cpp <<
  82. //----------------------------------------------------
  83. //Dynamically bounded intervals
  84. // discrete_interval<int>: [3,7]
  85. //continuous_interval<double>: [0.707107,1.41421) does NOT contain sqrt(2)
  86. //continuous_interval<string>: (Barcelona,Boston] does NOT contain 'Barcelona'
  87. //continuous_interval<string>: (Barcelona,Boston] does contain 'Berlin'
  88. // discrete_interval<Time>: (mon:08:30,mon:17:20)
  89. //
  90. //Statically bounded interval
  91. //right_open_interval<rational<int>>: [1/3,2/3)
  92. //]