1<html> 2<head> 3<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 4<title>Interface</title> 5<link rel="stylesheet" href="../../../../../doc/src/boostbook.css" type="text/css"> 6<meta name="generator" content="DocBook XSL Stylesheets V1.79.1"> 7<link rel="home" href="../index.html" title="Chapter 1. Boost.Icl"> 8<link rel="up" href="../index.html" title="Chapter 1. Boost.Icl"> 9<link rel="prev" href="semantics/concept_induction.html" title="Concept Induction"> 10<link rel="next" href="interface/required_concepts.html" title="Required Concepts"> 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="semantics/concept_induction.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.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="interface/required_concepts.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a> 24</div> 25<div class="section"> 26<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 27<a name="boost_icl.interface"></a><a class="link" href="interface.html" title="Interface">Interface</a> 28</h2></div></div></div> 29<div class="toc"><dl class="toc"> 30<dt><span class="section"><a href="interface.html#boost_icl.interface.class_templates">Class templates</a></span></dt> 31<dt><span class="section"><a href="interface/required_concepts.html">Required Concepts</a></span></dt> 32<dt><span class="section"><a href="interface/associated_types.html">Associated Types</a></span></dt> 33<dt><span class="section"><a href="interface/function_synopsis.html">Function Synopsis</a></span></dt> 34</dl></div> 35<p> 36 Section <span class="bold"><strong>Interface</strong></span> outlines types and functions 37 of the <span class="bold"><strong>Icl</strong></span>. Synoptical tables allow to review 38 the overall structure of the libraries design and to focus on structural equalities 39 and differences with the corresponding containers of the standard template 40 library. 41 </p> 42<div class="section"> 43<div class="titlepage"><div><div><h3 class="title"> 44<a name="boost_icl.interface.class_templates"></a><a class="link" href="interface.html#boost_icl.interface.class_templates" title="Class templates">Class templates</a> 45</h3></div></div></div> 46<div class="toc"><dl class="toc"> 47<dt><span class="section"><a href="interface.html#boost_icl.interface.class_templates.intervals">Intervals</a></span></dt> 48<dt><span class="section"><a href="interface.html#boost_icl.interface.class_templates.sets">Sets</a></span></dt> 49<dt><span class="section"><a href="interface.html#boost_icl.interface.class_templates.maps">Maps</a></span></dt> 50</dl></div> 51<div class="section"> 52<div class="titlepage"><div><div><h4 class="title"> 53<a name="boost_icl.interface.class_templates.intervals"></a><a class="link" href="interface.html#boost_icl.interface.class_templates.intervals" title="Intervals">Intervals</a> 54</h4></div></div></div> 55<p> 56 In the <span class="bold"><strong>icl</strong></span> we have two groups of interval 57 types. There are <span class="emphasis"><em><span class="bold"><strong>statically bounded</strong></span></em></span> 58 intervals, <code class="computeroutput"><a class="link" href="../boost/icl/right_open_interval.html" title="Class template right_open_interval">right_open_interval</a></code>, 59 <code class="computeroutput"><a class="link" href="../boost/icl/left_open_interval.html" title="Class template left_open_interval">left_open_interval</a></code>, 60 <code class="computeroutput"><a class="link" href="../boost/icl/closed_interval.html" title="Class template closed_interval">closed_interval</a></code>, 61 <code class="computeroutput"><a class="link" href="../boost/icl/open_interval.html" title="Class template open_interval">open_interval</a></code>, that 62 always have the the same kind of interval borders and <span class="emphasis"><em><span class="bold"><strong>dynamically bounded</strong></span></em></span> intervals, <code class="computeroutput"><a class="link" href="../boost/icl/discrete_interval.html" title="Class template discrete_interval">discrete_interval</a></code>, <code class="computeroutput"><a class="link" href="../boost/icl/continuous_interval.html" title="Class template continuous_interval">continuous_interval</a></code> which 63 can have one of the four possible bound types at runtime. 64 </p> 65<div class="table"> 66<a name="boost_icl.interface.class_templates.intervals.t0"></a><p class="title"><b>Table 1.6. Interval class templates</b></p> 67<div class="table-contents"><table class="table" summary="Interval class templates"> 68<colgroup> 69<col> 70<col> 71<col> 72<col> 73</colgroup> 74<thead><tr> 75<th> 76 <p> 77 group 78 </p> 79 </th> 80<th> 81 <p> 82 form 83 </p> 84 </th> 85<th> 86 <p> 87 template 88 </p> 89 </th> 90<th> 91 <p> 92 instance parameters 93 </p> 94 </th> 95</tr></thead> 96<tbody> 97<tr> 98<td> 99 <p> 100 statically bounded 101 </p> 102 </td> 103<td> 104 <p> 105 asymmetric 106 </p> 107 </td> 108<td> 109 <p> 110 <code class="computeroutput"><a class="link" href="../boost/icl/right_open_interval.html" title="Class template right_open_interval">right_open_interval</a></code> 111 </p> 112 </td> 113<td> 114 <p> 115 <code class="computeroutput"><span class="special"><</span><span class="keyword">class</span> 116 <span class="identifier">DomainT</span><span class="special">,</span> 117 <span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span><span class="special">></span><span class="keyword">class</span> <span class="identifier">Compare</span><span class="special">></span></code> 118 </p> 119 </td> 120</tr> 121<tr> 122<td> 123 </td> 124<td> 125 </td> 126<td> 127 <p> 128 <code class="computeroutput"><a class="link" href="../boost/icl/left_open_interval.html" title="Class template left_open_interval">left_open_interval</a></code> 129 </p> 130 </td> 131<td> 132 <p> 133 <code class="computeroutput"><span class="special"><...</span><span class="identifier">same</span> 134 <span class="keyword">for</span> <span class="identifier">all</span> 135 <span class="identifier">interval</span> <span class="keyword">class</span> 136 <span class="identifier">templates</span><span class="special">...></span></code> 137 </p> 138 </td> 139</tr> 140<tr> 141<td> 142 </td> 143<td> 144 <p> 145 symmetric 146 </p> 147 </td> 148<td> 149 <p> 150 <code class="computeroutput"><a class="link" href="../boost/icl/closed_interval.html" title="Class template closed_interval">closed_interval</a></code> 151 </p> 152 </td> 153<td> 154 </td> 155</tr> 156<tr> 157<td> 158 </td> 159<td> 160 </td> 161<td> 162 <p> 163 <code class="computeroutput"><a class="link" href="../boost/icl/open_interval.html" title="Class template open_interval">open_interval</a></code> 164 </p> 165 </td> 166<td> 167 </td> 168</tr> 169<tr> 170<td> 171 <p> 172 dynamically bounded 173 </p> 174 </td> 175<td> 176 </td> 177<td> 178 <p> 179 <code class="computeroutput"><a class="link" href="../boost/icl/discrete_interval.html" title="Class template discrete_interval">discrete_interval</a></code> 180 </p> 181 </td> 182<td> 183 </td> 184</tr> 185<tr> 186<td> 187 </td> 188<td> 189 </td> 190<td> 191 <p> 192 <code class="computeroutput"><a class="link" href="../boost/icl/continuous_interval.html" title="Class template continuous_interval">continuous_interval</a></code> 193 </p> 194 </td> 195<td> 196 </td> 197</tr> 198</tbody> 199</table></div> 200</div> 201<br class="table-break"><p> 202 Not every class template works with all domain types. Use interval class 203 templates according the next table. 204 </p> 205<div class="table"> 206<a name="boost_icl.interface.class_templates.intervals.t1"></a><p class="title"><b>Table 1.7. Usability of interval class templates for discrete or continuous 207 domain types</b></p> 208<div class="table-contents"><table class="table" summary="Usability of interval class templates for discrete or continuous 209 domain types"> 210<colgroup> 211<col> 212<col> 213<col> 214<col> 215<col> 216</colgroup> 217<thead><tr> 218<th> 219 <p> 220 group 221 </p> 222 </th> 223<th> 224 <p> 225 form 226 </p> 227 </th> 228<th> 229 <p> 230 template 231 </p> 232 </th> 233<th> 234 <p> 235 discrete 236 </p> 237 </th> 238<th> 239 <p> 240 continuous 241 </p> 242 </th> 243</tr></thead> 244<tbody> 245<tr> 246<td> 247 <p> 248 statically bounded 249 </p> 250 </td> 251<td> 252 <p> 253 asymmetric 254 </p> 255 </td> 256<td> 257 <p> 258 <code class="computeroutput"><a class="link" href="../boost/icl/right_open_interval.html" title="Class template right_open_interval">right_open_interval</a></code> 259 </p> 260 </td> 261<td> 262 <p> 263 yes 264 </p> 265 </td> 266<td> 267 <p> 268 yes 269 </p> 270 </td> 271</tr> 272<tr> 273<td> 274 </td> 275<td> 276 </td> 277<td> 278 <p> 279 <code class="computeroutput"><a class="link" href="../boost/icl/left_open_interval.html" title="Class template left_open_interval">left_open_interval</a></code> 280 </p> 281 </td> 282<td> 283 <p> 284 yes 285 </p> 286 </td> 287<td> 288 <p> 289 yes 290 </p> 291 </td> 292</tr> 293<tr> 294<td> 295 </td> 296<td> 297 <p> 298 symmetric 299 </p> 300 </td> 301<td> 302 <p> 303 <code class="computeroutput"><a class="link" href="../boost/icl/closed_interval.html" title="Class template closed_interval">closed_interval</a></code> 304 </p> 305 </td> 306<td> 307 <p> 308 yes 309 </p> 310 </td> 311<td> 312 </td> 313</tr> 314<tr> 315<td> 316 </td> 317<td> 318 </td> 319<td> 320 <p> 321 <code class="computeroutput"><a class="link" href="../boost/icl/open_interval.html" title="Class template open_interval">open_interval</a></code> 322 </p> 323 </td> 324<td> 325 <p> 326 yes 327 </p> 328 </td> 329<td> 330 </td> 331</tr> 332<tr> 333<td> 334 <p> 335 dynamically bounded 336 </p> 337 </td> 338<td> 339 </td> 340<td> 341 <p> 342 <code class="computeroutput"><a class="link" href="../boost/icl/discrete_interval.html" title="Class template discrete_interval">discrete_interval</a></code> 343 </p> 344 </td> 345<td> 346 <p> 347 yes 348 </p> 349 </td> 350<td> 351 </td> 352</tr> 353<tr> 354<td> 355 </td> 356<td> 357 </td> 358<td> 359 <p> 360 <code class="computeroutput"><a class="link" href="../boost/icl/continuous_interval.html" title="Class template continuous_interval">continuous_interval</a></code> 361 </p> 362 </td> 363<td> 364 </td> 365<td> 366 <p> 367 yes 368 </p> 369 </td> 370</tr> 371</tbody> 372</table></div> 373</div> 374<br class="table-break"><p> 375 From a pragmatical point of view, the most important interval class template 376 of the <span class="emphasis"><em>statically bounded</em></span> group is <code class="computeroutput"><a class="link" href="../boost/icl/right_open_interval.html" title="Class template right_open_interval">right_open_interval</a></code>. 377 For discrete domain types also closed intervals might be convenient. Asymmetric 378 intervals can be used with continuous domain types but <code class="computeroutput"><a class="link" href="../boost/icl/continuous_interval.html" title="Class template continuous_interval">continuous_interval</a></code> 379 is the only class template that allows to represent a singleton interval 380 that contains only one element. 381 </p> 382<p> 383 Use <code class="computeroutput"><a class="link" href="../boost/icl/continuous_interval.html" title="Class template continuous_interval">continuous_interval</a></code>, 384 if you work with interval containers of countinuous domain types and you 385 want to be able to handle single values: 386 </p> 387<p> 388</p> 389<pre class="programlisting"><span class="keyword">typedef</span> <span class="identifier">interval_set</span><span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">less</span><span class="special">,</span> <span class="identifier">continuous_interval</span><span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">></span> <span class="special">></span> <span class="identifier">IdentifiersT</span><span class="special">;</span> 390<span class="identifier">IdentifiersT</span> <span class="identifier">identifiers</span><span class="special">,</span> <span class="identifier">excluded</span><span class="special">;</span> 391<span class="identifier">identifiers</span> <span class="special">+=</span> <span class="identifier">continuous_interval</span><span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">>::</span><span class="identifier">right_open</span><span class="special">(</span><span class="string">"a"</span><span class="special">,</span> <span class="string">"c"</span><span class="special">);</span> 392 393<span class="comment">// special identifiers shall be excluded</span> 394<span class="identifier">identifiers</span> <span class="special">-=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">(</span><span class="string">"boost"</span><span class="special">);</span> 395<span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"identifiers: "</span> <span class="special"><<</span> <span class="identifier">identifiers</span> <span class="special"><<</span> <span class="identifier">endl</span><span class="special">;</span> 396 397<span class="identifier">excluded</span> <span class="special">=</span> <span class="identifier">IdentifiersT</span><span class="special">(</span><span class="identifier">icl</span><span class="special">::</span><span class="identifier">hull</span><span class="special">(</span><span class="identifier">identifiers</span><span class="special">))</span> <span class="special">-</span> <span class="identifier">identifiers</span><span class="special">;</span> 398<span class="identifier">cout</span> <span class="special"><<</span> <span class="string">"excluded : "</span> <span class="special"><<</span> <span class="identifier">excluded</span> <span class="special"><<</span> <span class="identifier">endl</span><span class="special">;</span> 399 400<span class="comment">//------ Program output: --------</span> 401<span class="identifier">identifiers</span><span class="special">:</span> <span class="special">{[</span><span class="identifier">a</span><span class="special">,</span><span class="identifier">boost</span><span class="special">)(</span><span class="identifier">boost</span><span class="special">,</span><span class="identifier">c</span><span class="special">)}</span> 402<span class="identifier">excluded</span> <span class="special">:</span> <span class="special">{[</span><span class="identifier">boost</span><span class="special">,</span><span class="identifier">boost</span><span class="special">]}</span> 403</pre> 404<p> 405 </p> 406<h5> 407<a name="boost_icl.interface.class_templates.intervals.h0"></a> 408 <span class="phrase"><a name="boost_icl.interface.class_templates.intervals.library_defaults_and_class_template__code__phrase_role__identifier__interval__phrase___code_"></a></span><a class="link" href="interface.html#boost_icl.interface.class_templates.intervals.library_defaults_and_class_template__code__phrase_role__identifier__interval__phrase___code_">Library 409 defaults and class template <code class="computeroutput"><span class="identifier">interval</span></code></a> 410 </h5> 411<p> 412 As shown in the example above, you can choose an interval type by instantiating 413 the interval container template with the desired type. 414 </p> 415<p> 416</p> 417<pre class="programlisting"><span class="keyword">typedef</span> <span class="identifier">interval_set</span><span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">less</span><span class="special">,</span> <span class="identifier">continuous_interval</span><span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">></span> <span class="special">></span> <span class="identifier">IdentifiersT</span><span class="special">;</span> 418</pre> 419<p> 420 </p> 421<p> 422 But you can work with the library default for interval template parameters 423 as well, which is <code class="computeroutput"><span class="identifier">interval</span><span class="special"><</span><span class="identifier">DomainT</span><span class="special">,</span><span class="identifier">Compare</span><span class="special">>::</span><span class="identifier">type</span></code>. 424 </p> 425<div class="informaltable"><table class="table"> 426<colgroup> 427<col> 428<col> 429<col> 430<col> 431</colgroup> 432<thead><tr> 433<th> 434 </th> 435<th> 436 <p> 437 interval bounds 438 </p> 439 </th> 440<th> 441 <p> 442 domain_type 443 </p> 444 </th> 445<th> 446 <p> 447 interval_default 448 </p> 449 </th> 450</tr></thead> 451<tbody> 452<tr> 453<td> 454 <p> 455 <code class="computeroutput"><span class="preprocessor">#ifdef</span></code> BOOST_ICL_USE_STATIC_BOUNDED_INTERVALS 456 </p> 457 </td> 458<td> 459 <p> 460 static 461 </p> 462 </td> 463<td> 464 </td> 465<td> 466 <p> 467 <code class="computeroutput"><a class="link" href="../boost/icl/right_open_interval.html" title="Class template right_open_interval">right_open_interval</a></code> 468 </p> 469 </td> 470</tr> 471<tr> 472<td> 473 <p> 474 <code class="computeroutput"><span class="preprocessor">#else</span></code> 475 </p> 476 </td> 477<td> 478 <p> 479 dynamic 480 </p> 481 </td> 482<td> 483 <p> 484 discrete 485 </p> 486 </td> 487<td> 488 <p> 489 <code class="computeroutput"><a class="link" href="../boost/icl/discrete_interval.html" title="Class template discrete_interval">discrete_interval</a></code> 490 </p> 491 </td> 492</tr> 493<tr> 494<td> 495 </td> 496<td> 497 </td> 498<td> 499 <p> 500 continuous 501 </p> 502 </td> 503<td> 504 <p> 505 <code class="computeroutput"><a class="link" href="../boost/icl/continuous_interval.html" title="Class template continuous_interval">continuous_interval</a></code> 506 </p> 507 </td> 508</tr> 509</tbody> 510</table></div> 511<p> 512 So, if you are always happy with the library default for the interval type, 513 just use 514</p> 515<pre class="programlisting"><span class="identifier">icl</span><span class="special">::</span><span class="identifier">interval</span><span class="special"><</span><span class="identifier">MyDomainT</span><span class="special">>::</span><span class="identifier">type</span> <span class="identifier">myInterval</span><span class="special">;</span> 516</pre> 517<p> 518 as you standard way of declaring intervals and default parameters for interval 519 containers: 520</p> 521<pre class="programlisting"><span class="keyword">typedef</span> <span class="identifier">interval_set</span><span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">></span> <span class="identifier">IdentifiersT</span><span class="special">;</span> 522<span class="identifier">IdentifiersT</span> <span class="identifier">identifiers</span><span class="special">,</span> <span class="identifier">excluded</span><span class="special">;</span> 523<span class="identifier">identifiers</span> <span class="special">+=</span> <span class="identifier">interval</span><span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">>::</span><span class="identifier">right_open</span><span class="special">(</span><span class="string">"a"</span><span class="special">,</span> <span class="string">"c"</span><span class="special">);</span> 524<span class="special">.</span> <span class="special">.</span> <span class="special">.</span> 525</pre> 526<p> 527 </p> 528<p> 529 So class template <code class="computeroutput"><a class="link" href="../boost/icl/interval.html" title="Struct template interval">interval</a></code> 530 provides a standard way to work with the library default for intervals. 531 Via <code class="computeroutput"><span class="identifier">interval</span><span class="special"><</span><span class="identifier">D</span><span class="special">,</span><span class="identifier">C</span><span class="special">>::</span><span class="identifier">type</span></code> 532 you can declare a default interval. In addition four static functions 533</p> 534<pre class="programlisting"><span class="identifier">T</span> <span class="identifier">interval</span><span class="special"><</span><span class="identifier">D</span><span class="special">,</span><span class="identifier">C</span><span class="special">>::</span><span class="identifier">right_open</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">D</span><span class="special">&,</span> <span class="keyword">const</span> <span class="identifier">D</span><span class="special">&);</span> 535<span class="identifier">T</span> <span class="identifier">interval</span><span class="special"><</span><span class="identifier">D</span><span class="special">,</span><span class="identifier">C</span><span class="special">>::</span><span class="identifier">left_open</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">D</span><span class="special">&,</span> <span class="keyword">const</span> <span class="identifier">D</span><span class="special">&);</span> 536<span class="identifier">T</span> <span class="identifier">interval</span><span class="special"><</span><span class="identifier">D</span><span class="special">,</span><span class="identifier">C</span><span class="special">>::</span><span class="identifier">closed</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">D</span><span class="special">&,</span> <span class="keyword">const</span> <span class="identifier">D</span><span class="special">&);</span> 537<span class="identifier">T</span> <span class="identifier">interval</span><span class="special"><</span><span class="identifier">D</span><span class="special">,</span><span class="identifier">C</span><span class="special">>::</span><span class="identifier">open</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">D</span><span class="special">&,</span> <span class="keyword">const</span> <span class="identifier">D</span><span class="special">&);</span> 538</pre> 539<p> 540 allow to construct intervals of the library default <code class="computeroutput"><span class="identifier">T</span> 541 <span class="special">=</span> <span class="identifier">interval</span><span class="special"><</span><span class="identifier">D</span><span class="special">,</span><span class="identifier">C</span><span class="special">>::</span><span class="identifier">type</span></code>. 542 </p> 543<p> 544 If you 545</p> 546<pre class="programlisting"><span class="preprocessor">#define</span> <span class="identifier">BOOST_ICL_USE_STATIC_BOUNDED_INTERVALS</span> 547</pre> 548<p> 549 the library uses only statically bounded <code class="computeroutput"><a class="link" href="../boost/icl/right_open_interval.html" title="Class template right_open_interval">right_open_interval</a></code> 550 as default interval type. In this case, the four static functions above 551 are also available, but they only move interval borders consistently, if 552 their domain type is discrete, and create an appropriate <code class="computeroutput"><a class="link" href="../boost/icl/right_open_interval.html" title="Class template right_open_interval">right_open_interval</a></code> 553 finally: 554</p> 555<pre class="programlisting"><span class="identifier">interval</span><span class="special"><</span><span class="identifier">D</span><span class="special">,</span><span class="identifier">C</span><span class="special">>::</span><span class="identifier">right_open</span><span class="special">(</span><span class="identifier">a</span><span class="special">,</span><span class="identifier">b</span><span class="special">)</span> <span class="special">==</span> <span class="special">[</span><span class="identifier">a</span><span class="special">,</span> <span class="identifier">b</span><span class="special">)</span> <span class="special">-></span> <span class="special">[</span><span class="identifier">a</span> <span class="special">,</span> <span class="identifier">b</span> <span class="special">)</span> 556<span class="identifier">interval</span><span class="special"><</span><span class="identifier">D</span><span class="special">,</span><span class="identifier">C</span><span class="special">>::</span> <span class="identifier">left_open</span><span class="special">(</span><span class="identifier">a</span><span class="special">,</span><span class="identifier">b</span><span class="special">)</span> <span class="special">==</span> <span class="special">(</span><span class="identifier">a</span><span class="special">,</span> <span class="identifier">b</span><span class="special">]</span> <span class="special">-></span> <span class="special">[</span><span class="identifier">a</span><span class="special">++,</span> <span class="identifier">b</span><span class="special">++)</span> 557<span class="identifier">interval</span><span class="special"><</span><span class="identifier">D</span><span class="special">,</span><span class="identifier">C</span><span class="special">>::</span> <span class="identifier">closed</span><span class="special">(</span><span class="identifier">a</span><span class="special">,</span><span class="identifier">b</span><span class="special">)</span> <span class="special">==</span> <span class="special">[</span><span class="identifier">a</span><span class="special">,</span> <span class="identifier">b</span><span class="special">]</span> <span class="special">-></span> <span class="special">[</span><span class="identifier">a</span> <span class="special">,</span> <span class="identifier">b</span><span class="special">++)</span> 558<span class="identifier">interval</span><span class="special"><</span><span class="identifier">D</span><span class="special">,</span><span class="identifier">C</span><span class="special">>::</span> <span class="identifier">open</span><span class="special">(</span><span class="identifier">a</span><span class="special">,</span><span class="identifier">b</span><span class="special">)</span> <span class="special">==</span> <span class="special">(</span><span class="identifier">a</span><span class="special">,</span> <span class="identifier">b</span><span class="special">)</span> <span class="special">-></span> <span class="special">[</span><span class="identifier">a</span><span class="special">++,</span> <span class="identifier">b</span> <span class="special">)</span> 559</pre> 560<p> 561 </p> 562<p> 563 For continuous domain types only the first of the four functions is applicable 564 that matches the library default for statically bounded intervals: <code class="computeroutput"><a class="link" href="../boost/icl/right_open_interval.html" title="Class template right_open_interval">right_open_interval</a></code>. 565 The other three functions can not perform an appropriate tranformation 566 and will not compile. 567 </p> 568</div> 569<div class="section"> 570<div class="titlepage"><div><div><h4 class="title"> 571<a name="boost_icl.interface.class_templates.sets"></a><a class="link" href="interface.html#boost_icl.interface.class_templates.sets" title="Sets">Sets</a> 572</h4></div></div></div> 573<p> 574 The next two tables give an overview over <span class="emphasis"><em><span class="bold"><strong>set 575 class templates</strong></span></em></span> of the icl. 576 </p> 577<div class="table"> 578<a name="boost_icl.interface.class_templates.sets.t0"></a><p class="title"><b>Table 1.8. Set class templates</b></p> 579<div class="table-contents"><table class="table" summary="Set class templates"> 580<colgroup> 581<col> 582<col> 583<col> 584</colgroup> 585<thead><tr> 586<th> 587 <p> 588 group 589 </p> 590 </th> 591<th> 592 <p> 593 template 594 </p> 595 </th> 596<th> 597 <p> 598 instance parameters 599 </p> 600 </th> 601</tr></thead> 602<tbody> 603<tr> 604<td> 605 <p> 606 <code class="computeroutput"><a class="link" href="../boost/icl/interval_base_set.html" title="Class template interval_base_set">interval_sets</a></code> 607 </p> 608 </td> 609<td> 610 <p> 611 <code class="computeroutput"><a class="link" href="../boost/icl/interval_set.html" title="Class template interval_set">interval_set</a></code> 612 </p> 613 </td> 614<td> 615 <p> 616 <code class="computeroutput"><span class="special"><</span><span class="identifier">DomainT</span><span class="special">,</span><span class="identifier">Compare</span><span class="special">,</span><span class="identifier">IntervalT</span><span class="special">,</span><span class="identifier">Alloc</span><span class="special">></span></code> 617 </p> 618 </td> 619</tr> 620<tr> 621<td> 622 </td> 623<td> 624 <p> 625 <code class="computeroutput"><a class="link" href="../boost/icl/separate_interval_set.html" title="Class template separate_interval_set">separate_interval_set</a></code> 626 </p> 627 </td> 628<td> 629 <p> 630 <code class="computeroutput"><span class="special"><</span><span class="identifier">DomainT</span><span class="special">,</span><span class="identifier">Compare</span><span class="special">,</span><span class="identifier">IntervalT</span><span class="special">,</span><span class="identifier">Alloc</span><span class="special">></span></code> 631 </p> 632 </td> 633</tr> 634<tr> 635<td> 636 </td> 637<td> 638 <p> 639 <code class="computeroutput"><a class="link" href="../boost/icl/split_interval_set.html" title="Class template split_interval_set">split_interval_set</a></code> 640 </p> 641 </td> 642<td> 643 <p> 644 <code class="computeroutput"><span class="special"><</span><span class="identifier">DomainT</span><span class="special">,</span><span class="identifier">Compare</span><span class="special">,</span><span class="identifier">IntervalT</span><span class="special">,</span><span class="identifier">Alloc</span><span class="special">></span></code> 645 </p> 646 </td> 647</tr> 648</tbody> 649</table></div> 650</div> 651<br class="table-break"><p> 652 Templates and template parameters, given in the preceding table are described 653 in detail below. <code class="computeroutput"><a class="link" href="../boost/icl/interval_base_set.html" title="Class template interval_base_set">Interval_sets</a></code> 654 represent three class templates <code class="computeroutput"><a class="link" href="../boost/icl/interval_set.html" title="Class template interval_set">interval_set</a></code>, 655 <code class="computeroutput"><a class="link" href="../boost/icl/separate_interval_set.html" title="Class template separate_interval_set">separate_interval_set</a></code> 656 and <code class="computeroutput"><a class="link" href="../boost/icl/split_interval_set.html" title="Class template split_interval_set">split_interval_set</a></code> 657 that all have equal template parameters. 658 </p> 659<div class="table"> 660<a name="boost_icl.interface.class_templates.sets.t1"></a><p class="title"><b>Table 1.9. Parameters of set class templates</b></p> 661<div class="table-contents"><table class="table" summary="Parameters of set class templates"> 662<colgroup> 663<col> 664<col> 665<col> 666<col> 667<col> 668</colgroup> 669<thead><tr> 670<th> 671 </th> 672<th> 673 <p> 674 type of elements 675 </p> 676 </th> 677<th> 678 <p> 679 order of elements 680 </p> 681 </th> 682<th> 683 <p> 684 type of intervals 685 </p> 686 </th> 687<th> 688 <p> 689 memory allocation 690 </p> 691 </th> 692</tr></thead> 693<tbody> 694<tr> 695<td> 696 <p> 697 template parameter 698 </p> 699 </td> 700<td> 701 <p> 702 <code class="computeroutput"><span class="keyword">class</span></code> 703 </p> 704 </td> 705<td> 706 <p> 707 <code class="computeroutput"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span><span class="special">></span><span class="keyword">class</span></code> 708 </p> 709 </td> 710<td> 711 <p> 712 <code class="computeroutput"><span class="keyword">class</span></code> 713 </p> 714 </td> 715<td> 716 <p> 717 <code class="computeroutput"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span><span class="special">></span><span class="keyword">class</span></code> 718 </p> 719 </td> 720</tr> 721<tr> 722<td> 723 <p> 724 <code class="computeroutput"><a class="link" href="../boost/icl/interval.html" title="Struct template interval">interval</a></code> 725 </p> 726 </td> 727<td> 728 <p> 729 <code class="computeroutput"><span class="identifier">DomainT</span></code> 730 </p> 731 </td> 732<td> 733 <p> 734 <code class="computeroutput"><span class="identifier">Compare</span> <span class="special">=</span> 735 <span class="identifier">std</span><span class="special">::</span><span class="identifier">less</span></code> 736 </p> 737 </td> 738<td> 739 </td> 740<td> 741 </td> 742</tr> 743<tr> 744<td> 745 <p> 746 <code class="computeroutput"><a class="link" href="../boost/icl/interval_base_set.html" title="Class template interval_base_set">interval_sets</a></code> 747 </p> 748 </td> 749<td> 750 <p> 751 <code class="computeroutput"><span class="identifier">DomainT</span></code> 752 </p> 753 </td> 754<td> 755 <p> 756 <code class="computeroutput"><span class="identifier">Compare</span> <span class="special">=</span> 757 <span class="identifier">std</span><span class="special">::</span><span class="identifier">less</span></code> 758 </p> 759 </td> 760<td> 761 <p> 762 <code class="computeroutput"><span class="identifier">IntervalT</span> <span class="special">=</span> 763 <span class="identifier">interval</span><span class="special"><</span><span class="identifier">DomainT</span><span class="special">,</span><span class="identifier">Compare</span><span class="special">>::</span><span class="identifier">type</span></code> 764 </p> 765 </td> 766<td> 767 <p> 768 <code class="computeroutput"><span class="identifier">Alloc</span> <span class="special">=</span> 769 <span class="identifier">std</span><span class="special">::</span><span class="identifier">alloc</span></code> 770 </p> 771 </td> 772</tr> 773</tbody> 774</table></div> 775</div> 776<br class="table-break"> 777</div> 778<div class="section"> 779<div class="titlepage"><div><div><h4 class="title"> 780<a name="boost_icl.interface.class_templates.maps"></a><a class="link" href="interface.html#boost_icl.interface.class_templates.maps" title="Maps">Maps</a> 781</h4></div></div></div> 782<p> 783 The next two tables give an overview over <span class="emphasis"><em><span class="bold"><strong>map 784 class templates</strong></span></em></span> of the icl. 785 </p> 786<div class="table"> 787<a name="boost_icl.interface.class_templates.maps.t0"></a><p class="title"><b>Table 1.10. map class templates</b></p> 788<div class="table-contents"><table class="table" summary="map class templates"> 789<colgroup> 790<col> 791<col> 792<col> 793</colgroup> 794<thead><tr> 795<th> 796 <p> 797 group 798 </p> 799 </th> 800<th> 801 <p> 802 template 803 </p> 804 </th> 805<th> 806 <p> 807 instance parameters 808 </p> 809 </th> 810</tr></thead> 811<tbody> 812<tr> 813<td> 814 <p> 815 <code class="computeroutput"><a class="link" href="../boost/icl/interval_base_map.html" title="Class template interval_base_map">interval_maps</a></code> 816 </p> 817 </td> 818<td> 819 <p> 820 <code class="computeroutput"><a class="link" href="../boost/icl/interval_map.html" title="Class template interval_map">interval_map</a></code> 821 </p> 822 </td> 823<td> 824 <p> 825 <code class="computeroutput"><span class="special"><</span><span class="identifier">DomainT</span><span class="special">,</span><span class="identifier">CodomainT</span><span class="special">,</span><span class="identifier">Traits</span><span class="special">,</span><span class="identifier">Compare</span><span class="special">,</span><span class="identifier">Combine</span><span class="special">,</span><span class="identifier">Section</span><span class="special">,</span><span class="identifier">IntervalT</span><span class="special">,</span><span class="identifier">Alloc</span><span class="special">></span></code> 826 </p> 827 </td> 828</tr> 829<tr> 830<td> 831 </td> 832<td> 833 <p> 834 <code class="computeroutput"><a class="link" href="../boost/icl/split_interval_map.html" title="Class template split_interval_map">split_interval_map</a></code> 835 </p> 836 </td> 837<td> 838 <p> 839 <code class="computeroutput"><span class="special"><</span><span class="identifier">DomainT</span><span class="special">,</span><span class="identifier">CodomainT</span><span class="special">,</span><span class="identifier">Traits</span><span class="special">,</span><span class="identifier">Compare</span><span class="special">,</span><span class="identifier">Combine</span><span class="special">,</span><span class="identifier">Section</span><span class="special">,</span><span class="identifier">IntervalT</span><span class="special">,</span><span class="identifier">Alloc</span><span class="special">></span></code> 840 </p> 841 </td> 842</tr> 843<tr> 844<td> 845 <p> 846 <code class="computeroutput"><a class="link" href="../boost/icl/map.html" title="Class template map">icl::map</a></code> 847 </p> 848 </td> 849<td> 850 <p> 851 <code class="computeroutput"><a class="link" href="../boost/icl/map.html" title="Class template map">icl::map</a></code> 852 </p> 853 </td> 854<td> 855 <p> 856 <code class="computeroutput"><span class="special"><</span><span class="identifier">DomainT</span><span class="special">,</span><span class="identifier">CodomainT</span><span class="special">,</span><span class="identifier">Traits</span><span class="special">,</span><span class="identifier">Compare</span><span class="special">,</span><span class="identifier">Combine</span><span class="special">,</span><span class="identifier">Section</span><span class="special">,</span><span class="identifier">Alloc</span><span class="special">></span></code> 857 </p> 858 </td> 859</tr> 860</tbody> 861</table></div> 862</div> 863<br class="table-break"><p> 864 Templates and template parameters, given in the preceding table are described 865 in detail below. <code class="computeroutput"><a class="link" href="../boost/icl/interval_base_map.html" title="Class template interval_base_map">Interval_maps</a></code> 866 represent two class templates <code class="computeroutput"><a class="link" href="../boost/icl/interval_map.html" title="Class template interval_map">interval_map</a></code> 867 and <code class="computeroutput"><a class="link" href="../boost/icl/split_interval_map.html" title="Class template split_interval_map">split_interval_map</a></code> 868 that all have equal template parameters. 869 </p> 870<div class="table"> 871<a name="boost_icl.interface.class_templates.maps.t1"></a><p class="title"><b>Table 1.11. Parameters of map class templates</b></p> 872<div class="table-contents"><table class="table" summary="Parameters of map class templates"> 873<colgroup> 874<col> 875<col> 876<col> 877<col> 878<col> 879<col> 880<col> 881<col> 882</colgroup> 883<thead><tr> 884<th> 885 </th> 886<th> 887 <p> 888 elements 889 </p> 890 </th> 891<th> 892 <p> 893 mapped values 894 </p> 895 </th> 896<th> 897 <p> 898 traits 899 </p> 900 </th> 901<th> 902 <p> 903 order of elements 904 </p> 905 </th> 906<th> 907 <p> 908 aggregation propagation 909 </p> 910 </th> 911<th> 912 <p> 913 intersection propagation 914 </p> 915 </th> 916<th> 917 <p> 918 type of intervals 919 </p> 920 </th> 921<th> 922 <p> 923 memory allocation 924 </p> 925 </th> 926</tr></thead> 927<tbody> 928<tr> 929<td> 930 <p> 931 template parameter 932 </p> 933 </td> 934<td> 935 <p> 936 <code class="computeroutput"><span class="keyword">class</span></code> 937 </p> 938 </td> 939<td> 940 <p> 941 <code class="computeroutput"><span class="keyword">class</span></code> 942 </p> 943 </td> 944<td> 945 <p> 946 <code class="computeroutput"><span class="keyword">class</span></code> 947 </p> 948 </td> 949<td> 950 <p> 951 <code class="computeroutput"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span><span class="special">></span><span class="keyword">class</span></code> 952 </p> 953 </td> 954<td> 955 <p> 956 <code class="computeroutput"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span><span class="special">></span><span class="keyword">class</span></code> 957 </p> 958 </td> 959<td> 960 <p> 961 <code class="computeroutput"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span><span class="special">></span><span class="keyword">class</span></code> 962 </p> 963 </td> 964<td> 965 <p> 966 <code class="computeroutput"><span class="keyword">class</span></code> 967 </p> 968 </td> 969<td> 970 <p> 971 <code class="computeroutput"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span><span class="special">></span><span class="keyword">class</span></code> 972 </p> 973 </td> 974</tr> 975<tr> 976<td> 977 <p> 978 <code class="computeroutput"><a class="link" href="../boost/icl/interval_base_map.html" title="Class template interval_base_map">interval_maps</a></code> 979 </p> 980 </td> 981<td> 982 <p> 983 <code class="computeroutput"><span class="identifier">DomainT</span></code> 984 </p> 985 </td> 986<td> 987 <p> 988 <code class="computeroutput"><span class="identifier">CodomainT</span></code> 989 </p> 990 </td> 991<td> 992 <p> 993 <code class="computeroutput"><span class="identifier">Traits</span> <span class="special">=</span> 994 <span class="identifier">identity_absorber</span></code> 995 </p> 996 </td> 997<td> 998 <p> 999 <code class="computeroutput"><span class="identifier">Compare</span> <span class="special">=</span> 1000 <span class="identifier">std</span><span class="special">::</span><span class="identifier">less</span></code> 1001 </p> 1002 </td> 1003<td> 1004 <p> 1005 <code class="computeroutput"><span class="identifier">Combine</span> <span class="special">=</span> 1006 <span class="identifier">inplace_plus</span></code> 1007 </p> 1008 </td> 1009<td> 1010 <p> 1011 <code class="computeroutput"><span class="identifier">Section</span> <span class="special">=</span> 1012 <span class="identifier">icl</span><span class="special">::</span><span class="identifier">inplace_et</span></code> 1013 </p> 1014 </td> 1015<td> 1016 <p> 1017 <code class="computeroutput"><span class="identifier">IntervalT</span> <span class="special">=</span> 1018 <span class="identifier">interval</span><span class="special"><</span><span class="identifier">DomainT</span><span class="special">,</span><span class="identifier">Compare</span><span class="special">>::</span><span class="identifier">type</span></code> 1019 </p> 1020 </td> 1021<td> 1022 <p> 1023 <code class="computeroutput"><span class="identifier">Alloc</span> <span class="special">=</span> 1024 <span class="identifier">std</span><span class="special">::</span><span class="identifier">alloc</span></code> 1025 </p> 1026 </td> 1027</tr> 1028<tr> 1029<td> 1030 <p> 1031 <code class="computeroutput"><a class="link" href="../boost/icl/map.html" title="Class template map">icl::map</a></code> 1032 </p> 1033 </td> 1034<td> 1035 <p> 1036 <code class="computeroutput"><span class="identifier">DomainT</span></code> 1037 </p> 1038 </td> 1039<td> 1040 <p> 1041 <code class="computeroutput"><span class="identifier">CodomainT</span></code> 1042 </p> 1043 </td> 1044<td> 1045 <p> 1046 <code class="computeroutput"><span class="identifier">Traits</span> <span class="special">=</span> 1047 <span class="identifier">identity_absorber</span></code> 1048 </p> 1049 </td> 1050<td> 1051 <p> 1052 <code class="computeroutput"><span class="identifier">Compare</span> <span class="special">=</span> 1053 <span class="identifier">std</span><span class="special">::</span><span class="identifier">less</span></code> 1054 </p> 1055 </td> 1056<td> 1057 <p> 1058 <code class="computeroutput"><span class="identifier">Combine</span> <span class="special">=</span> 1059 <span class="identifier">inplace_plus</span></code> 1060 </p> 1061 </td> 1062<td> 1063 <p> 1064 <code class="computeroutput"><span class="identifier">Section</span> <span class="special">=</span> 1065 <span class="identifier">icl</span><span class="special">::</span><span class="identifier">inplace_et</span></code> 1066 </p> 1067 </td> 1068<td> 1069 <p> 1070 <code class="computeroutput"><span class="identifier">Alloc</span> <span class="special">=</span> 1071 <span class="identifier">std</span><span class="special">::</span><span class="identifier">alloc</span></code> 1072 </p> 1073 </td> 1074</tr> 1075</tbody> 1076</table></div> 1077</div> 1078<br class="table-break"><p> 1079 Using the following placeholders, 1080 </p> 1081<p> 1082</p> 1083<pre class="programlisting"><span class="identifier">D</span> <span class="special">:=</span> <span class="keyword">class</span> <span class="identifier">DomainT</span><span class="special">,</span> 1084<span class="identifier">C</span> <span class="special">:=</span> <span class="keyword">class</span> <span class="identifier">CodomainT</span><span class="special">,</span> 1085<span class="identifier">T</span> <span class="special">:=</span> <span class="keyword">class</span> <span class="identifier">Traits</span><span class="special">,</span> 1086<span class="identifier">cp</span> <span class="special">:=</span> <span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">D</span><span class="special">></span><span class="keyword">class</span> <span class="identifier">Compare</span> <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">less</span><span class="special">,</span> 1087<span class="identifier">cb</span> <span class="special">:=</span> <span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">C</span><span class="special">></span><span class="keyword">class</span> <span class="identifier">Combine</span> <span class="special">=</span> <span class="identifier">icl</span><span class="special">::</span><span class="identifier">inplace_plus</span><span class="special">,</span> 1088<span class="identifier">s</span> <span class="special">:=</span> <span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">C</span><span class="special">></span><span class="keyword">class</span> <span class="identifier">Section</span> <span class="special">=</span> <span class="identifier">icl</span><span class="special">::</span><span class="identifier">inplace_et</span><span class="special">,</span> 1089<span class="identifier">I</span> <span class="special">:=</span> <span class="keyword">class</span> <span class="identifier">IntervalT</span> <span class="special">=</span> <span class="identifier">icl</span><span class="special">::</span><span class="identifier">interval</span><span class="special"><</span><span class="identifier">D</span><span class="special">,</span><span class="identifier">cp</span><span class="special">>::</span><span class="identifier">type</span> 1090<span class="identifier">a</span> <span class="special">:=</span> <span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span><span class="special">></span><span class="keyword">class</span> <span class="identifier">Alloc</span> <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">allocator</span> 1091</pre> 1092<p> 1093 </p> 1094<p> 1095 we arrive at a final synoptical matrix of class templates and their parameters. 1096 </p> 1097<pre class="programlisting">interval <D, cp, > 1098interval_sets<D, cp, I, a > 1099interval_maps<D, C, T, cp, cb, s, I, a > 1100icl::map <D, C, T, cp, cb, s, a > 1101</pre> 1102<p> 1103 The choice of parameters and their positions follow the std::containers 1104 as close a possible, so that usage of interval sets and maps does only 1105 require minimal additional knowledge. 1106 </p> 1107<p> 1108 Additional knowledge is required when instantiating a comparison parameter 1109 <code class="computeroutput"><span class="identifier">Compare</span></code> or an allocation 1110 parameter <code class="computeroutput"><span class="identifier">Alloc</span></code>. In contrast 1111 to std::containers these have to be instantiated as templates, like e.g. 1112</p> 1113<pre class="programlisting"><span class="identifier">interval_set</span><span class="special"><</span><span class="identifier">string</span><span class="special">,</span> <span class="identifier">german_compare</span><span class="special">></span> <span class="identifier">sections</span><span class="special">;</span> <span class="comment">// 2nd parameter is a template</span> 1114<span class="identifier">std</span><span class="special">::</span><span class="identifier">set</span><span class="special"><</span><span class="identifier">string</span><span class="special">,</span> <span class="identifier">german_compare</span><span class="special"><</span><span class="identifier">string</span><span class="special">></span> <span class="special">></span> <span class="identifier">words</span><span class="special">;</span> <span class="comment">// 2nd parameter is a type</span> 1115</pre> 1116<p> 1117 </p> 1118</div> 1119</div> 1120</div> 1121<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> 1122<td align="left"></td> 1123<td align="right"><div class="copyright-footer">Copyright © 2007-2010 Joachim 1124 Faulhaber<br>Copyright © 1999-2006 Cortex Software 1125 GmbH<p> 1126 Distributed under the Boost Software License, Version 1.0. (See accompanying 1127 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>) 1128 </p> 1129</div></td> 1130</tr></table> 1131<hr> 1132<div class="spirit-nav"> 1133<a accesskey="p" href="semantics/concept_induction.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.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="interface/required_concepts.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a> 1134</div> 1135</body> 1136</html> 1137