123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- /*-----------------------------------------------------------------------------+
- Interval Container Library
- Author: Joachim Faulhaber
- Copyright (c) 2007-2010: Joachim Faulhaber
- Copyright (c) 1999-2006: Cortex Software GmbH, Kantstrasse 57, Berlin
- +------------------------------------------------------------------------------+
- Distributed under the Boost Software License, Version 1.0.
- (See accompanying file LICENCE.txt or copy at
- http://www.boost.org/LICENSE_1_0.txt)
- +-----------------------------------------------------------------------------*/
- /** Example interval.cpp \file interval.cpp
- \brief Intervals for integral and continuous instance types.
- Closed and open interval borders.
- Much of the library code deals with intervals which are implemented
- by interval class templates. This program gives a very short samlpe of
- different interval instances.
- \include interval_/interval.cpp
- */
- //[example_interval
- #include <iostream>
- #include <string>
- #include <math.h>
- // Dynamically bounded intervals
- #include <boost/icl/discrete_interval.hpp>
- #include <boost/icl/continuous_interval.hpp>
- // Statically bounded intervals
- #include <boost/icl/right_open_interval.hpp>
- #include <boost/icl/left_open_interval.hpp>
- #include <boost/icl/closed_interval.hpp>
- #include <boost/icl/open_interval.hpp>
- #include "../toytime.hpp"
- #include <boost/icl/rational.hpp>
- using namespace std;
- using namespace boost;
- using namespace boost::icl;
- int main()
- {
- cout << ">>Interval Container Library: Sample interval.cpp <<\n";
- cout << "----------------------------------------------------\n";
- // Class template discrete_interval can be used for discrete data types
- // like integers, date and time and other types that have a least steppable
- // unit.
- discrete_interval<int> int_interval
- = construct<discrete_interval<int> >(3, 7, interval_bounds::closed());
- // Class template continuous_interval can be used for continuous data types
- // like double, boost::rational or strings.
- continuous_interval<double> sqrt_interval
- = construct<continuous_interval<double> >(1/sqrt(2.0), sqrt(2.0));
- //interval_bounds::right_open() is default
- continuous_interval<string> city_interval
- = construct<continuous_interval<string> >("Barcelona", "Boston", interval_bounds::left_open());
- discrete_interval<Time> time_interval
- = construct<discrete_interval<Time> >(Time(monday,8,30), Time(monday,17,20),
- interval_bounds::open());
- cout << "Dynamically bounded intervals:\n";
- cout << " discrete_interval<int>: " << int_interval << endl;
- cout << "continuous_interval<double>: " << sqrt_interval << " does "
- << string(contains(sqrt_interval, sqrt(2.0))?"":"NOT")
- << " contain sqrt(2)" << endl;
- cout << "continuous_interval<string>: " << city_interval << " does "
- << string(contains(city_interval,"Barcelona")?"":"NOT")
- << " contain 'Barcelona'" << endl;
- cout << "continuous_interval<string>: " << city_interval << " does "
- << string(contains(city_interval, "Berlin")?"":"NOT")
- << " contain 'Berlin'" << endl;
- cout << " discrete_interval<Time>: " << time_interval << "\n\n";
- // There are statically bounded interval types with fixed interval borders
- right_open_interval<string> fix_interval1; // You will probably use one kind of static intervals
- // right_open_intervals are recommended.
- closed_interval<unsigned int> fix_interval2; // ... static closed, left_open and open intervals
- left_open_interval<float> fix_interval3; // are implemented for sake of completeness but
- open_interval<short> fix_interval4; // are of minor practical importance.
- right_open_interval<rational<int> > range1(rational<int>(0,1), rational<int>(2,3));
- right_open_interval<rational<int> > range2(rational<int>(1,3), rational<int>(1,1));
- // This middle third of the unit interval [0,1)
- cout << "Statically bounded interval:\n";
- cout << "right_open_interval<rational<int>>: " << (range1 & range2) << endl;
- return 0;
- }
- // Program output:
- //>>Interval Container Library: Sample interval.cpp <<
- //----------------------------------------------------
- //Dynamically bounded intervals
- // discrete_interval<int>: [3,7]
- //continuous_interval<double>: [0.707107,1.41421) does NOT contain sqrt(2)
- //continuous_interval<string>: (Barcelona,Boston] does NOT contain 'Barcelona'
- //continuous_interval<string>: (Barcelona,Boston] does contain 'Berlin'
- // discrete_interval<Time>: (mon:08:30,mon:17:20)
- //
- //Statically bounded interval
- //right_open_interval<rational<int>>: [1/3,2/3)
- //]
|