1 | // The next line includes <boost/date_time/posix_time/posix_time.hpp>
|
---|
2 | // and a few lines of adapter code.
|
---|
3 | #include <boost/icl/ptime.hpp>
|
---|
4 | #include <iostream>
|
---|
5 | #include <boost/icl/interval_map.hpp>
|
---|
6 |
|
---|
7 | using namespace std;
|
---|
8 | using namespace boost::posix_time;
|
---|
9 | using namespace boost::icl;
|
---|
10 |
|
---|
11 | // Type set<string> collects the names of party guests. Since std::set is
|
---|
12 | // a model of the itl's set concept, the concept provides an operator +=
|
---|
13 | // that performs a set union on overlap of intervals.
|
---|
14 | typedef std::set<string> GuestSetT;
|
---|
15 |
|
---|
16 | void boost_party()
|
---|
17 | {
|
---|
18 | GuestSetT mary_harry;
|
---|
19 | mary_harry.insert("Mary");
|
---|
20 | mary_harry.insert("Harry");
|
---|
21 |
|
---|
22 | GuestSetT diana_susan;
|
---|
23 | diana_susan.insert("Diana");
|
---|
24 | diana_susan.insert("Susan");
|
---|
25 |
|
---|
26 | GuestSetT peter;
|
---|
27 | peter.insert("Peter");
|
---|
28 |
|
---|
29 | // A party is an interval map that maps time intervals to sets of guests
|
---|
30 | interval_map<ptime, GuestSetT> party;
|
---|
31 |
|
---|
32 | party.add( // add and element
|
---|
33 | make_pair(
|
---|
34 | interval<ptime>::right_open(
|
---|
35 | time_from_string("2008-05-20 19:30"),
|
---|
36 | time_from_string("2008-05-20 23:00")),
|
---|
37 | mary_harry));
|
---|
38 |
|
---|
39 | party += // element addition can also be done via operator +=
|
---|
40 | make_pair(
|
---|
41 | interval<ptime>::right_open(
|
---|
42 | time_from_string("2008-05-20 20:10"),
|
---|
43 | time_from_string("2008-05-21 00:00")),
|
---|
44 | diana_susan);
|
---|
45 |
|
---|
46 | party +=
|
---|
47 | make_pair(
|
---|
48 | interval<ptime>::right_open(
|
---|
49 | time_from_string("2008-05-20 22:15"),
|
---|
50 | time_from_string("2008-05-21 00:30")),
|
---|
51 | peter);
|
---|
52 |
|
---|
53 |
|
---|
54 | interval_map<ptime, GuestSetT>::iterator it = party.begin();
|
---|
55 | cout << "----- History of party guests -------------------------\n";
|
---|
56 | while(it != party.end())
|
---|
57 | {
|
---|
58 | interval<ptime>::type when = it->first;
|
---|
59 | // Who is at the party within the time interval 'when' ?
|
---|
60 | GuestSetT who = (*it++).second;
|
---|
61 | cout << when << ": " << who << endl;
|
---|
62 | }
|
---|
63 |
|
---|
64 | }
|
---|
65 |
|
---|
66 |
|
---|
67 | int main()
|
---|
68 | {
|
---|
69 | cout << ">>Interval Container Library: Sample boost_party.cpp <<\n";
|
---|
70 | cout << "-------------------------------------------------------\n";
|
---|
71 | boost_party();
|
---|
72 | return 0;
|
---|
73 | }
|
---|
74 |
|
---|
75 | // Program output:
|
---|
76 | /*-----------------------------------------------------------------------------
|
---|
77 | >>Interval Container Library: Sample boost_party.cpp <<
|
---|
78 | -------------------------------------------------------
|
---|
79 | ----- History of party guests -------------------------
|
---|
80 | [2008-May-20 19:30:00, 2008-May-20 20:10:00): Harry Mary
|
---|
81 | [2008-May-20 20:10:00, 2008-May-20 22:15:00): Diana Harry Mary Susan
|
---|
82 | [2008-May-20 22:15:00, 2008-May-20 23:00:00): Diana Harry Mary Peter Susan
|
---|
83 | [2008-May-20 23:00:00, 2008-May-21 00:00:00): Diana Peter Susan
|
---|
84 | [2008-May-21 00:00:00, 2008-May-21 00:30:00): Peter
|
---|
85 | -----------------------------------------------------------------------------*/
|
---|