#include<iostream>#include<string>#include<math.h>#include<boost/type_traits/is_same.hpp>// We can change the library default for the interval types by defining #defineBOOST_ICL_USE_STATIC_BOUNDED_INTERVALS// prior to other inluces from the icl.// The interval type that is automatically used with interval// containers then is the statically bounded right_open_interval.#include<boost/icl/interval_set.hpp>#include<boost/icl/split_interval_set.hpp>// The statically bounded interval type 'right_open_interval'// is indirectly included via interval containers.#include"../toytime.hpp"#include<boost/icl/rational.hpp>usingnamespacestd;usingnamespaceboost;usingnamespaceboost::icl;intmain(){cout<<">> Interval Container Library: Sample static_interval.cpp <<\n";cout<<"------------------------------------------------------------\n";// Statically bounded intervals are the user defined library default for // interval parameters in interval containers now.BOOST_STATIC_ASSERT((boost::is_same<interval_set<int>::interval_type,right_open_interval<int>>::value));BOOST_STATIC_ASSERT((boost::is_same<interval_set<float>::interval_type,right_open_interval<float>>::value));// As we can see the library default both for discrete and continuous// domain_types T is 'right_open_interval<T>'.// The user defined library default for intervals is also available via // the template 'interval':BOOST_STATIC_ASSERT((boost::is_same<interval<int>::type,right_open_interval<int>>::value));// Again we are declaring and initializing the four test intervals that have been used// in the example 'interval' and 'dynamic_interval'interval<int>::typeint_interval=interval<int>::right_open(3,8);// shifted the upper boundinterval<double>::typesqrt_interval=interval<double>::right_open(1/sqrt(2.0),sqrt(2.0));// Interval ("Barcelona", "Boston"] can not be represented because there is no 'steppable next' on// lower bound "Barcelona". Ok. this is a different interval:interval<string>::typecity_interval=interval<string>::right_open("Barcelona","Boston");// Toy Time is discrete again so we can transfrom open(Time(monday,8,30), Time(monday,17,20))// to right_open(Time(monday,8,31), Time(monday,17,20))interval<Time>::typetime_interval=interval<Time>::right_open(Time(monday,8,31),Time(monday,17,20));cout<<"----- Statically bounded intervals ----------------------------------------\n";cout<<"right_open_interval<int> : "<<int_interval<<endl;cout<<"right_open_interval<double>: "<<sqrt_interval<<" does "<<string(contains(sqrt_interval,sqrt(2.0))?"":"NOT")<<" contain sqrt(2)"<<endl;cout<<"right_open_interval<string>: "<<city_interval<<" does "<<string(contains(city_interval,"Barcelona")?"":"NOT")<<" contain 'Barcelona'"<<endl;cout<<"right_open_interval<string>: "<<city_interval<<" does "<<string(contains(city_interval,"Boston")?"":"NOT")<<" contain 'Boston'"<<endl;cout<<"right_open_interval<Time> : "<<time_interval<<"\n\n";// Using statically bounded intervals does not allows to apply operations// with elements on all interval containers, if their domain_type is continuous. // The code that follows is identical to example 'dynamic_interval'. Only 'internally'// the library default for the interval template now is 'right_open_interval' interval<rational<int>>::typeunit_interval=interval<rational<int>>::right_open(rational<int>(0),rational<int>(1));interval_set<rational<int>>unit_set(unit_interval);interval_set<rational<int>>ratio_set(unit_set);// ratio_set -= rational<int>(1,3); // This line will not compile, because we can not// represent a singleton interval as right_open_interval.return0;}// Program output://>> Interval Container Library: Sample static_interval.cpp <<//------------------------------------------------------------//----- Statically bounded intervals ----------------------------------------//right_open_interval<int> : [3,8)//right_open_interval<double>: [0.707107,1.41421) does NOT contain sqrt(2)//right_open_interval<string>: [Barcelona,Boston) does contain 'Barcelona'//right_open_interval<string>: [Barcelona,Boston) does NOT contain 'Boston'//right_open_interval<Time> : [mon:08:31,mon:17:20)
Статья Static interval раздела Chapter 1. Boost.Icl Examples может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.