]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/icl/doc/html/boost_icl/examples/party.html
bump version to 12.2.2-pve1
[ceph.git] / ceph / src / boost / libs / icl / doc / html / boost_icl / examples / party.html
CommitLineData
7c673cae
FG
1<html>
2<head>
3<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
4<title>Party</title>
5<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css">
6<meta name="generator" content="DocBook XSL Stylesheets V1.74.0">
7<link rel="home" href="../../index.html" title="Chapter&#160;1.&#160;Boost.Icl">
8<link rel="up" href="../examples.html" title="Examples">
9<link rel="prev" href="../examples.html" title="Examples">
10<link rel="next" href="interval.html" title="Interval">
11</head>
12<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
13<table cellpadding="2" width="100%"><tr>
14<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td>
15<td align="center"><a href="../../../../../../index.html">Home</a></td>
16<td align="center"><a href="../../../../../libraries.htm">Libraries</a></td>
17<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
18<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
19<td align="center"><a href="../../../../../../more/index.htm">More</a></td>
20</tr></table>
21<hr>
22<div class="spirit-nav">
23<a accesskey="p" href="../examples.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../examples.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="interval.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
24</div>
25<div class="section boost_icl_examples_party" lang="en">
26<div class="titlepage"><div><div><h3 class="title">
27<a name="boost_icl.examples.party"></a><a class="link" href="party.html" title="Party">Party</a>
28</h3></div></div></div>
29<p>
30 Example <span class="bold"><strong>party</strong></span> demonstrates the possibilities
31 of an interval map (<code class="computeroutput"><a class="link" href="../../boost/icl/interval_map.html" title="Class template interval_map">interval_map</a></code>
32 or <code class="computeroutput"><a class="link" href="../../boost/icl/split_interval_map.html" title="Class template split_interval_map">split_interval_map</a></code>).
33 An <code class="computeroutput"><a class="link" href="../../boost/icl/interval_map.html" title="Class template interval_map">interval_map</a></code> maps
34 intervals to a given content. In this case the content is a set of party
35 guests represented by their name strings.
36 </p>
37<p>
38 As time goes by, groups of people join the party and leave later in the evening.
39 So we add a time interval and a name set to the <code class="computeroutput"><a class="link" href="../../boost/icl/interval_map.html" title="Class template interval_map">interval_map</a></code>
40 for the attendance of each group of people, that come together and leave
41 together. On every overlap of intervals, the corresponding name sets are
42 accumulated. At the points of overlap the intervals are split. The accumulation
43 of content is done via an operator += that has to be implemented for the
44 content parameter of the <code class="computeroutput"><a class="link" href="../../boost/icl/interval_map.html" title="Class template interval_map">interval_map</a></code>.
45 Finally the interval_map contains the history of attendance and all points
46 in time, where the group of party guests changed.
47 </p>
48<p>
49 Party demonstrates a principle that we call <span class="emphasis"><em><span class="bold"><strong>aggregate
50 on overlap</strong></span></em></span>: On insertion a value associated to the
51 interval is aggregated with those values in the interval_map that overlap
52 with the inserted value. There are two behavioral aspects to <span class="emphasis"><em><span class="bold"><strong>aggregate on overlap</strong></span></em></span>: a <span class="emphasis"><em><span class="bold"><strong>decompositional behavior</strong></span></em></span> and an <span class="emphasis"><em><span class="bold"><strong>accumulative behavior</strong></span></em></span>.
53 </p>
54<div class="itemizedlist"><ul type="disc">
55<li>
56 The <span class="emphasis"><em><span class="bold"><strong>decompositional behavior</strong></span></em></span>
57 splits up intervals on the <span class="emphasis"><em>time</em></span><span class="emphasis"><em>dimension</em></span>
58 of the interval_map so that the intervals are split whenever associated
59 values change.
60 </li>
61<li>
62 The <span class="emphasis"><em><span class="bold"><strong>accumulative behavior</strong></span></em></span>
63 accumulates associated values on every overlap of an insertion for the
64 associated values.
65 </li>
66</ul></div>
67<p>
68 The aggregation function is += by default. Different aggregations can be
69 used, if desired.
70 </p>
71<p>
72 </p>
73<p>
74
75</p>
76<pre class="programlisting"><span class="comment">// The next line includes &lt;boost/date_time/posix_time/posix_time.hpp&gt;
77</span><span class="comment">// and a few lines of adapter code.
78</span><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">icl</span><span class="special">/</span><span class="identifier">ptime</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
79<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
80<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">icl</span><span class="special">/</span><span class="identifier">interval_map</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
81
82<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">std</span><span class="special">;</span>
83<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">posix_time</span><span class="special">;</span>
84<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">icl</span><span class="special">;</span>
85
86<span class="comment">// Type set&lt;string&gt; collects the names of party guests. Since std::set is
87</span><span class="comment">// a model of the itl's set concept, the concept provides an operator +=
88</span><span class="comment">// that performs a set union on overlap of intervals.
89</span><span class="keyword">typedef</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">set</span><span class="special">&lt;</span><span class="identifier">string</span><span class="special">&gt;</span> <span class="identifier">GuestSetT</span><span class="special">;</span>
90
91<span class="keyword">void</span> <span class="identifier">boost_party</span><span class="special">()</span>
92<span class="special">{</span>
93 <span class="identifier">GuestSetT</span> <span class="identifier">mary_harry</span><span class="special">;</span>
94 <span class="identifier">mary_harry</span><span class="special">.</span><span class="identifier">insert</span><span class="special">(</span><span class="string">"Mary"</span><span class="special">);</span>
95 <span class="identifier">mary_harry</span><span class="special">.</span><span class="identifier">insert</span><span class="special">(</span><span class="string">"Harry"</span><span class="special">);</span>
96
97 <span class="identifier">GuestSetT</span> <span class="identifier">diana_susan</span><span class="special">;</span>
98 <span class="identifier">diana_susan</span><span class="special">.</span><span class="identifier">insert</span><span class="special">(</span><span class="string">"Diana"</span><span class="special">);</span>
99 <span class="identifier">diana_susan</span><span class="special">.</span><span class="identifier">insert</span><span class="special">(</span><span class="string">"Susan"</span><span class="special">);</span>
100
101 <span class="identifier">GuestSetT</span> <span class="identifier">peter</span><span class="special">;</span>
102 <span class="identifier">peter</span><span class="special">.</span><span class="identifier">insert</span><span class="special">(</span><span class="string">"Peter"</span><span class="special">);</span>
103
104 <span class="comment">// A party is an interval map that maps time intervals to sets of guests
105</span> <span class="identifier">interval_map</span><span class="special">&lt;</span><span class="identifier">ptime</span><span class="special">,</span> <span class="identifier">GuestSetT</span><span class="special">&gt;</span> <span class="identifier">party</span><span class="special">;</span>
106
107 <span class="identifier">party</span><span class="special">.</span><span class="identifier">add</span><span class="special">(</span> <span class="comment">// add and element
108</span> <span class="identifier">make_pair</span><span class="special">(</span>
109 <span class="identifier">interval</span><span class="special">&lt;</span><span class="identifier">ptime</span><span class="special">&gt;::</span><span class="identifier">right_open</span><span class="special">(</span>
110 <span class="identifier">time_from_string</span><span class="special">(</span><span class="string">"2008-05-20 19:30"</span><span class="special">),</span>
111 <span class="identifier">time_from_string</span><span class="special">(</span><span class="string">"2008-05-20 23:00"</span><span class="special">)),</span>
112 <span class="identifier">mary_harry</span><span class="special">));</span>
113
114 <span class="identifier">party</span> <span class="special">+=</span> <span class="comment">// element addition can also be done via operator +=
115</span> <span class="identifier">make_pair</span><span class="special">(</span>
116 <span class="identifier">interval</span><span class="special">&lt;</span><span class="identifier">ptime</span><span class="special">&gt;::</span><span class="identifier">right_open</span><span class="special">(</span>
117 <span class="identifier">time_from_string</span><span class="special">(</span><span class="string">"2008-05-20 20:10"</span><span class="special">),</span>
118 <span class="identifier">time_from_string</span><span class="special">(</span><span class="string">"2008-05-21 00:00"</span><span class="special">)),</span>
119 <span class="identifier">diana_susan</span><span class="special">);</span>
120
121 <span class="identifier">party</span> <span class="special">+=</span>
122 <span class="identifier">make_pair</span><span class="special">(</span>
123 <span class="identifier">interval</span><span class="special">&lt;</span><span class="identifier">ptime</span><span class="special">&gt;::</span><span class="identifier">right_open</span><span class="special">(</span>
124 <span class="identifier">time_from_string</span><span class="special">(</span><span class="string">"2008-05-20 22:15"</span><span class="special">),</span>
125 <span class="identifier">time_from_string</span><span class="special">(</span><span class="string">"2008-05-21 00:30"</span><span class="special">)),</span>
126 <span class="identifier">peter</span><span class="special">);</span>
127
128
129 <span class="identifier">interval_map</span><span class="special">&lt;</span><span class="identifier">ptime</span><span class="special">,</span> <span class="identifier">GuestSetT</span><span class="special">&gt;::</span><span class="identifier">iterator</span> <span class="identifier">it</span> <span class="special">=</span> <span class="identifier">party</span><span class="special">.</span><span class="identifier">begin</span><span class="special">();</span>
130 <span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"----- History of party guests -------------------------\n"</span><span class="special">;</span>
131 <span class="keyword">while</span><span class="special">(</span><span class="identifier">it</span> <span class="special">!=</span> <span class="identifier">party</span><span class="special">.</span><span class="identifier">end</span><span class="special">())</span>
132 <span class="special">{</span>
133 <span class="identifier">interval</span><span class="special">&lt;</span><span class="identifier">ptime</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">when</span> <span class="special">=</span> <span class="identifier">it</span><span class="special">-&gt;</span><span class="identifier">first</span><span class="special">;</span>
134 <span class="comment">// Who is at the party within the time interval 'when' ?
135</span> <span class="identifier">GuestSetT</span> <span class="identifier">who</span> <span class="special">=</span> <span class="special">(*</span><span class="identifier">it</span><span class="special">++).</span><span class="identifier">second</span><span class="special">;</span>
136 <span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">when</span> <span class="special">&lt;&lt;</span> <span class="string">": "</span> <span class="special">&lt;&lt;</span> <span class="identifier">who</span> <span class="special">&lt;&lt;</span> <span class="identifier">endl</span><span class="special">;</span>
137 <span class="special">}</span>
138
139<span class="special">}</span>
140
141
142<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span>
143<span class="special">{</span>
144 <span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"&gt;&gt;Interval Container Library: Sample boost_party.cpp &lt;&lt;\n"</span><span class="special">;</span>
145 <span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"-------------------------------------------------------\n"</span><span class="special">;</span>
146 <span class="identifier">boost_party</span><span class="special">();</span>
147 <span class="keyword">return</span> <span class="number">0</span><span class="special">;</span>
148<span class="special">}</span>
149
150<span class="comment">// Program output:
151</span><span class="comment">/*-----------------------------------------------------------------------------
152&gt;&gt;Interval Container Library: Sample boost_party.cpp &lt;&lt;
153-------------------------------------------------------
154----- History of party guests -------------------------
155[2008-May-20 19:30:00, 2008-May-20 20:10:00): Harry Mary
156[2008-May-20 20:10:00, 2008-May-20 22:15:00): Diana Harry Mary Susan
157[2008-May-20 22:15:00, 2008-May-20 23:00:00): Diana Harry Mary Peter Susan
158[2008-May-20 23:00:00, 2008-May-21 00:00:00): Diana Peter Susan
159[2008-May-21 00:00:00, 2008-May-21 00:30:00): Peter
160-----------------------------------------------------------------------------*/</span>
161</pre>
162<p>
163 </p>
164<p>
165 </p>
166<div class="caution"><table border="0" summary="Caution">
167<tr>
168<td rowspan="2" align="center" valign="top" width="25"><img alt="[Caution]" src="../../../../../../doc/src/images/caution.png"></td>
169<th align="left">Caution</th>
170</tr>
171<tr><td align="left" valign="top">
172<p>
173 </p>
174<p>
175 We are introducing <code class="computeroutput"><a class="link" href="../../boost/icl/interval_map.html" title="Class template interval_map">interval_maps</a></code>
176 using an <span class="emphasis"><em>interval map <span class="emphasis"><em><span class="bold"><strong>of sets
177 of strings</strong></span></em></span></em></span>, because of it's didactic advantages.
178 The party example is used to give an immediate access to the basic ideas
179 of interval maps and <span class="emphasis"><em>aggregate on overlap</em></span>. For real
180 world applications, an interval_map of sets is not necessarily recommended.
181 It has the same efficiency problems as a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">map</span></code>
182 of <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">sets</span></code>. There is a big realm though of
183 using interval_maps with numerical and other efficient data types for the
184 associated values.
185 </p>
186</td></tr>
187</table></div>
188</div>
189<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
190<td align="left"></td>
191<td align="right"><div class="copyright-footer">Copyright &#169; 2007 -2010 Joachim Faulhaber<br>Copyright &#169; 1999 -2006 Cortex Software GmbH<p>
192 Distributed under the Boost Software License, Version 1.0. (See accompanying
193 file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
194 </p>
195</div></td>
196</tr></table>
197<hr>
198<div class="spirit-nav">
199<a accesskey="p" href="../examples.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../examples.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="interval.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
200</div>
201</body>
202</html>