• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
15     Much of the library code deals with intervals which are implemented
16     by interval class templates. This program gives a very short samlpe of
17     different interval instances.
18 
19     \include interval_/interval.cpp
20 */
21 //[example_interval
22 #include <iostream>
23 #include <string>
24 #include <math.h>
25 
26 // Dynamically bounded intervals
27 #include <boost/icl/discrete_interval.hpp>
28 #include <boost/icl/continuous_interval.hpp>
29 
30 // Statically bounded intervals
31 #include <boost/icl/right_open_interval.hpp>
32 #include <boost/icl/left_open_interval.hpp>
33 #include <boost/icl/closed_interval.hpp>
34 #include <boost/icl/open_interval.hpp>
35 
36 #include "../toytime.hpp"
37 #include <boost/icl/rational.hpp>
38 
39 using namespace std;
40 using namespace boost;
41 using namespace boost::icl;
42 
main()43 int main()
44 {
45     cout << ">>Interval Container Library: Sample interval.cpp <<\n";
46     cout << "----------------------------------------------------\n";
47 
48     // Class template discrete_interval can be used for discrete data types
49     // like integers, date and time and other types that have a least steppable
50     // unit.
51     discrete_interval<int>      int_interval
52         = construct<discrete_interval<int> >(3, 7, interval_bounds::closed());
53 
54     // Class template continuous_interval can be used for continuous data types
55     // like double, boost::rational or strings.
56     continuous_interval<double> sqrt_interval
57         = construct<continuous_interval<double> >(1/sqrt(2.0), sqrt(2.0));
58                                                  //interval_bounds::right_open() is default
59     continuous_interval<string> city_interval
60         = construct<continuous_interval<string> >("Barcelona", "Boston", interval_bounds::left_open());
61 
62     discrete_interval<Time>     time_interval
63         = construct<discrete_interval<Time> >(Time(monday,8,30), Time(monday,17,20),
64                                               interval_bounds::open());
65 
66     cout << "Dynamically bounded intervals:\n";
67     cout << "  discrete_interval<int>:    " << int_interval  << endl;
68     cout << "continuous_interval<double>: " << sqrt_interval << " does "
69                                             << string(contains(sqrt_interval, sqrt(2.0))?"":"NOT")
70                                             << " contain sqrt(2)" << endl;
71     cout << "continuous_interval<string>: " << city_interval << " does "
72                                             << string(contains(city_interval,"Barcelona")?"":"NOT")
73                                             << " contain 'Barcelona'" << endl;
74     cout << "continuous_interval<string>: " << city_interval << " does "
75                                             << string(contains(city_interval, "Berlin")?"":"NOT")
76                                             << " contain 'Berlin'" << endl;
77     cout << "  discrete_interval<Time>:   " << time_interval << "\n\n";
78 
79     // There are statically bounded interval types with fixed interval borders
80     right_open_interval<string>   fix_interval1; // You will probably use one kind of static intervals
81                                                  // right_open_intervals are recommended.
82     closed_interval<unsigned int> fix_interval2; // ... static closed, left_open and open intervals
83     left_open_interval<float>     fix_interval3; // are implemented for sake of completeness but
84     open_interval<short>          fix_interval4; // are of minor practical importance.
85 
86     right_open_interval<rational<int> > range1(rational<int>(0,1),  rational<int>(2,3));
87     right_open_interval<rational<int> > range2(rational<int>(1,3),  rational<int>(1,1));
88 
89     // This middle third of the unit interval [0,1)
90     cout << "Statically bounded interval:\n";
91     cout << "right_open_interval<rational<int>>: " << (range1 & range2) << endl;
92 
93     return 0;
94 }
95 
96 // Program output:
97 
98 //>>Interval Container Library: Sample interval.cpp <<
99 //----------------------------------------------------
100 //Dynamically bounded intervals
101 //  discrete_interval<int>:    [3,7]
102 //continuous_interval<double>: [0.707107,1.41421) does NOT contain sqrt(2)
103 //continuous_interval<string>: (Barcelona,Boston] does NOT contain 'Barcelona'
104 //continuous_interval<string>: (Barcelona,Boston] does  contain 'Berlin'
105 //  discrete_interval<Time>:   (mon:08:30,mon:17:20)
106 //
107 //Statically bounded interval
108 //right_open_interval<rational<int>>: [1/3,2/3)
109 
110 //]
111 
112