123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- /*-----------------------------------------------------------------------------+
- Interval Container Library
- Author: Joachim Faulhaber
- Copyright (c) 2007-2009: 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 overlap_counter.cpp \file overlap_counter.cpp
- \brief The most simple application of an interval map:
- Counting the overlaps of added intervals.
- The most basic application of an interval_map is a counter counting
- the number of overlaps of intervals inserted into it.
- On could call an interval_map an aggregate on overlap machine. A very basic
- aggregation is summation of an integer. A interval_map<int,int> maps
- intervals of int to ints.
- If we insert a value pair (discrete_interval<int>(2,6), 1) into the interval_map, it
- increases the content of all value pairs in the map by 1, if their interval
- part overlaps with discrete_interval<int>(2,6).
- \include overlap_counter_/overlap_counter.cpp
- */
- //[example_overlap_counter
- #include <iostream>
- #include <boost/icl/split_interval_map.hpp>
- using namespace std;
- using namespace boost::icl;
- /* The most simple example of an interval_map is an overlap counter.
- If intervals are added that are associated with the value 1,
- all overlaps of added intervals are counted as a result in the
- associated values.
- */
- typedef interval_map<int, int> OverlapCounterT;
- void print_overlaps(const OverlapCounterT& counter)
- {
- for(OverlapCounterT::const_iterator it = counter.begin(); it != counter.end(); it++)
- {
- discrete_interval<int> itv = (*it).first;
- int overlaps_count = (*it).second;
- if(overlaps_count == 1)
- cout << "in interval " << itv << " intervals do not overlap" << endl;
- else
- cout << "in interval " << itv << ": "<< overlaps_count << " intervals overlap" << endl;
- }
- }
- void overlap_counter()
- {
- OverlapCounterT overlap_counter;
- discrete_interval<int> inter_val;
- inter_val = discrete_interval<int>::right_open(4,8);
- cout << "-- adding " << inter_val << " -----------------------------------------" << endl;
- overlap_counter += make_pair(inter_val, 1);
- print_overlaps(overlap_counter);
- cout << "-----------------------------------------------------------" << endl;
- inter_val = discrete_interval<int>::right_open(6,9);
- cout << "-- adding " << inter_val << " -----------------------------------------" << endl;
- overlap_counter += make_pair(inter_val, 1);
- print_overlaps(overlap_counter);
- cout << "-----------------------------------------------------------" << endl;
- inter_val = discrete_interval<int>::right_open(1,9);
- cout << "-- adding " << inter_val << " -----------------------------------------" << endl;
- overlap_counter += make_pair(inter_val, 1);
- print_overlaps(overlap_counter);
- cout << "-----------------------------------------------------------" << endl;
-
- }
- int main()
- {
- cout << ">>Interval Container Library: Sample overlap_counter.cpp <<\n";
- cout << "-----------------------------------------------------------\n";
- overlap_counter();
- return 0;
- }
- // Program output:
- // >>Interval Container Library: Sample overlap_counter.cpp <<
- // -----------------------------------------------------------
- // -- adding [4,8) -----------------------------------------
- // in interval [4,8) intervals do not overlap
- // -----------------------------------------------------------
- // -- adding [6,9) -----------------------------------------
- // in interval [4,6) intervals do not overlap
- // in interval [6,8): 2 intervals overlap
- // in interval [8,9) intervals do not overlap
- // -----------------------------------------------------------
- // -- adding [1,9) -----------------------------------------
- // in interval [1,4) intervals do not overlap
- // in interval [4,6): 2 intervals overlap
- // in interval [6,8): 3 intervals overlap
- // in interval [8,9): 2 intervals overlap
- // -----------------------------------------------------------
- //]
|