interface.html 58 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136
  1. <html>
  2. <head>
  3. <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
  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&#160;1.&#160;Boost.Icl">
  8. <link rel="up" href="../index.html" title="Chapter&#160;1.&#160;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&#160;1.6.&#160;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">&lt;</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">&lt;</span><span class="keyword">class</span><span class="special">&gt;</span><span class="keyword">class</span> <span class="identifier">Compare</span><span class="special">&gt;</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">&lt;...</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">...&gt;</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&#160;1.7.&#160;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">&lt;</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">&lt;</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">&gt;</span> <span class="special">&gt;</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">&lt;</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">&gt;::</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. <span class="comment">// special identifiers shall be excluded</span>
  393. <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>
  394. <span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"identifiers: "</span> <span class="special">&lt;&lt;</span> <span class="identifier">identifiers</span> <span class="special">&lt;&lt;</span> <span class="identifier">endl</span><span class="special">;</span>
  395. <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>
  396. <span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="string">"excluded : "</span> <span class="special">&lt;&lt;</span> <span class="identifier">excluded</span> <span class="special">&lt;&lt;</span> <span class="identifier">endl</span><span class="special">;</span>
  397. <span class="comment">//------ Program output: --------</span>
  398. <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>
  399. <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>
  400. </pre>
  401. <p>
  402. </p>
  403. <h5>
  404. <a name="boost_icl.interface.class_templates.intervals.h0"></a>
  405. <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
  406. defaults and class template <code class="computeroutput"><span class="identifier">interval</span></code></a>
  407. </h5>
  408. <p>
  409. As shown in the example above, you can choose an interval type by instantiating
  410. the interval container template with the desired type.
  411. </p>
  412. <p>
  413. </p>
  414. <pre class="programlisting"><span class="keyword">typedef</span> <span class="identifier">interval_set</span><span class="special">&lt;</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">&lt;</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">IdentifiersT</span><span class="special">;</span>
  415. </pre>
  416. <p>
  417. </p>
  418. <p>
  419. But you can work with the library default for interval template parameters
  420. as well, which is <code class="computeroutput"><span class="identifier">interval</span><span class="special">&lt;</span><span class="identifier">DomainT</span><span class="special">,</span><span class="identifier">Compare</span><span class="special">&gt;::</span><span class="identifier">type</span></code>.
  421. </p>
  422. <div class="informaltable"><table class="table">
  423. <colgroup>
  424. <col>
  425. <col>
  426. <col>
  427. <col>
  428. </colgroup>
  429. <thead><tr>
  430. <th>
  431. </th>
  432. <th>
  433. <p>
  434. interval bounds
  435. </p>
  436. </th>
  437. <th>
  438. <p>
  439. domain_type
  440. </p>
  441. </th>
  442. <th>
  443. <p>
  444. interval_default
  445. </p>
  446. </th>
  447. </tr></thead>
  448. <tbody>
  449. <tr>
  450. <td>
  451. <p>
  452. <code class="computeroutput"><span class="preprocessor">#ifdef</span></code> BOOST_ICL_USE_STATIC_BOUNDED_INTERVALS
  453. </p>
  454. </td>
  455. <td>
  456. <p>
  457. static
  458. </p>
  459. </td>
  460. <td>
  461. </td>
  462. <td>
  463. <p>
  464. <code class="computeroutput"><a class="link" href="../boost/icl/right_open_interval.html" title="Class template right_open_interval">right_open_interval</a></code>
  465. </p>
  466. </td>
  467. </tr>
  468. <tr>
  469. <td>
  470. <p>
  471. <code class="computeroutput"><span class="preprocessor">#else</span></code>
  472. </p>
  473. </td>
  474. <td>
  475. <p>
  476. dynamic
  477. </p>
  478. </td>
  479. <td>
  480. <p>
  481. discrete
  482. </p>
  483. </td>
  484. <td>
  485. <p>
  486. <code class="computeroutput"><a class="link" href="../boost/icl/discrete_interval.html" title="Class template discrete_interval">discrete_interval</a></code>
  487. </p>
  488. </td>
  489. </tr>
  490. <tr>
  491. <td>
  492. </td>
  493. <td>
  494. </td>
  495. <td>
  496. <p>
  497. continuous
  498. </p>
  499. </td>
  500. <td>
  501. <p>
  502. <code class="computeroutput"><a class="link" href="../boost/icl/continuous_interval.html" title="Class template continuous_interval">continuous_interval</a></code>
  503. </p>
  504. </td>
  505. </tr>
  506. </tbody>
  507. </table></div>
  508. <p>
  509. So, if you are always happy with the library default for the interval type,
  510. just use
  511. </p>
  512. <pre class="programlisting"><span class="identifier">icl</span><span class="special">::</span><span class="identifier">interval</span><span class="special">&lt;</span><span class="identifier">MyDomainT</span><span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">myInterval</span><span class="special">;</span>
  513. </pre>
  514. <p>
  515. as you standard way of declaring intervals and default parameters for interval
  516. containers:
  517. </p>
  518. <pre class="programlisting"><span class="keyword">typedef</span> <span class="identifier">interval_set</span><span class="special">&lt;</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">&gt;</span> <span class="identifier">IdentifiersT</span><span class="special">;</span>
  519. <span class="identifier">IdentifiersT</span> <span class="identifier">identifiers</span><span class="special">,</span> <span class="identifier">excluded</span><span class="special">;</span>
  520. <span class="identifier">identifiers</span> <span class="special">+=</span> <span class="identifier">interval</span><span class="special">&lt;</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">&gt;::</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>
  521. <span class="special">.</span> <span class="special">.</span> <span class="special">.</span>
  522. </pre>
  523. <p>
  524. </p>
  525. <p>
  526. So class template <code class="computeroutput"><a class="link" href="../boost/icl/interval.html" title="Struct template interval">interval</a></code>
  527. provides a standard way to work with the library default for intervals.
  528. Via <code class="computeroutput"><span class="identifier">interval</span><span class="special">&lt;</span><span class="identifier">D</span><span class="special">,</span><span class="identifier">C</span><span class="special">&gt;::</span><span class="identifier">type</span></code>
  529. you can declare a default interval. In addition four static functions
  530. </p>
  531. <pre class="programlisting"><span class="identifier">T</span> <span class="identifier">interval</span><span class="special">&lt;</span><span class="identifier">D</span><span class="special">,</span><span class="identifier">C</span><span class="special">&gt;::</span><span class="identifier">right_open</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">D</span><span class="special">&amp;,</span> <span class="keyword">const</span> <span class="identifier">D</span><span class="special">&amp;);</span>
  532. <span class="identifier">T</span> <span class="identifier">interval</span><span class="special">&lt;</span><span class="identifier">D</span><span class="special">,</span><span class="identifier">C</span><span class="special">&gt;::</span><span class="identifier">left_open</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">D</span><span class="special">&amp;,</span> <span class="keyword">const</span> <span class="identifier">D</span><span class="special">&amp;);</span>
  533. <span class="identifier">T</span> <span class="identifier">interval</span><span class="special">&lt;</span><span class="identifier">D</span><span class="special">,</span><span class="identifier">C</span><span class="special">&gt;::</span><span class="identifier">closed</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">D</span><span class="special">&amp;,</span> <span class="keyword">const</span> <span class="identifier">D</span><span class="special">&amp;);</span>
  534. <span class="identifier">T</span> <span class="identifier">interval</span><span class="special">&lt;</span><span class="identifier">D</span><span class="special">,</span><span class="identifier">C</span><span class="special">&gt;::</span><span class="identifier">open</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">D</span><span class="special">&amp;,</span> <span class="keyword">const</span> <span class="identifier">D</span><span class="special">&amp;);</span>
  535. </pre>
  536. <p>
  537. allow to construct intervals of the library default <code class="computeroutput"><span class="identifier">T</span>
  538. <span class="special">=</span> <span class="identifier">interval</span><span class="special">&lt;</span><span class="identifier">D</span><span class="special">,</span><span class="identifier">C</span><span class="special">&gt;::</span><span class="identifier">type</span></code>.
  539. </p>
  540. <p>
  541. If you
  542. </p>
  543. <pre class="programlisting"><span class="preprocessor">#define</span> <span class="identifier">BOOST_ICL_USE_STATIC_BOUNDED_INTERVALS</span>
  544. </pre>
  545. <p>
  546. 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>
  547. as default interval type. In this case, the four static functions above
  548. are also available, but they only move interval borders consistently, if
  549. 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>
  550. finally:
  551. </p>
  552. <pre class="programlisting"><span class="identifier">interval</span><span class="special">&lt;</span><span class="identifier">D</span><span class="special">,</span><span class="identifier">C</span><span class="special">&gt;::</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">-&gt;</span> <span class="special">[</span><span class="identifier">a</span> <span class="special">,</span> <span class="identifier">b</span> <span class="special">)</span>
  553. <span class="identifier">interval</span><span class="special">&lt;</span><span class="identifier">D</span><span class="special">,</span><span class="identifier">C</span><span class="special">&gt;::</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">-&gt;</span> <span class="special">[</span><span class="identifier">a</span><span class="special">++,</span> <span class="identifier">b</span><span class="special">++)</span>
  554. <span class="identifier">interval</span><span class="special">&lt;</span><span class="identifier">D</span><span class="special">,</span><span class="identifier">C</span><span class="special">&gt;::</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">-&gt;</span> <span class="special">[</span><span class="identifier">a</span> <span class="special">,</span> <span class="identifier">b</span><span class="special">++)</span>
  555. <span class="identifier">interval</span><span class="special">&lt;</span><span class="identifier">D</span><span class="special">,</span><span class="identifier">C</span><span class="special">&gt;::</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">-&gt;</span> <span class="special">[</span><span class="identifier">a</span><span class="special">++,</span> <span class="identifier">b</span> <span class="special">)</span>
  556. </pre>
  557. <p>
  558. </p>
  559. <p>
  560. For continuous domain types only the first of the four functions is applicable
  561. 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>.
  562. The other three functions can not perform an appropriate tranformation
  563. and will not compile.
  564. </p>
  565. </div>
  566. <div class="section">
  567. <div class="titlepage"><div><div><h4 class="title">
  568. <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>
  569. </h4></div></div></div>
  570. <p>
  571. The next two tables give an overview over <span class="emphasis"><em><span class="bold"><strong>set
  572. class templates</strong></span></em></span> of the icl.
  573. </p>
  574. <div class="table">
  575. <a name="boost_icl.interface.class_templates.sets.t0"></a><p class="title"><b>Table&#160;1.8.&#160;Set class templates</b></p>
  576. <div class="table-contents"><table class="table" summary="Set class templates">
  577. <colgroup>
  578. <col>
  579. <col>
  580. <col>
  581. </colgroup>
  582. <thead><tr>
  583. <th>
  584. <p>
  585. group
  586. </p>
  587. </th>
  588. <th>
  589. <p>
  590. template
  591. </p>
  592. </th>
  593. <th>
  594. <p>
  595. instance parameters
  596. </p>
  597. </th>
  598. </tr></thead>
  599. <tbody>
  600. <tr>
  601. <td>
  602. <p>
  603. <code class="computeroutput"><a class="link" href="../boost/icl/interval_base_set.html" title="Class template interval_base_set">interval_sets</a></code>
  604. </p>
  605. </td>
  606. <td>
  607. <p>
  608. <code class="computeroutput"><a class="link" href="../boost/icl/interval_set.html" title="Class template interval_set">interval_set</a></code>
  609. </p>
  610. </td>
  611. <td>
  612. <p>
  613. <code class="computeroutput"><span class="special">&lt;</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">&gt;</span></code>
  614. </p>
  615. </td>
  616. </tr>
  617. <tr>
  618. <td>
  619. </td>
  620. <td>
  621. <p>
  622. <code class="computeroutput"><a class="link" href="../boost/icl/separate_interval_set.html" title="Class template separate_interval_set">separate_interval_set</a></code>
  623. </p>
  624. </td>
  625. <td>
  626. <p>
  627. <code class="computeroutput"><span class="special">&lt;</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">&gt;</span></code>
  628. </p>
  629. </td>
  630. </tr>
  631. <tr>
  632. <td>
  633. </td>
  634. <td>
  635. <p>
  636. <code class="computeroutput"><a class="link" href="../boost/icl/split_interval_set.html" title="Class template split_interval_set">split_interval_set</a></code>
  637. </p>
  638. </td>
  639. <td>
  640. <p>
  641. <code class="computeroutput"><span class="special">&lt;</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">&gt;</span></code>
  642. </p>
  643. </td>
  644. </tr>
  645. </tbody>
  646. </table></div>
  647. </div>
  648. <br class="table-break"><p>
  649. Templates and template parameters, given in the preceding table are described
  650. 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>
  651. 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>,
  652. <code class="computeroutput"><a class="link" href="../boost/icl/separate_interval_set.html" title="Class template separate_interval_set">separate_interval_set</a></code>
  653. 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>
  654. that all have equal template parameters.
  655. </p>
  656. <div class="table">
  657. <a name="boost_icl.interface.class_templates.sets.t1"></a><p class="title"><b>Table&#160;1.9.&#160;Parameters of set class templates</b></p>
  658. <div class="table-contents"><table class="table" summary="Parameters of set class templates">
  659. <colgroup>
  660. <col>
  661. <col>
  662. <col>
  663. <col>
  664. <col>
  665. </colgroup>
  666. <thead><tr>
  667. <th>
  668. </th>
  669. <th>
  670. <p>
  671. type of elements
  672. </p>
  673. </th>
  674. <th>
  675. <p>
  676. order of elements
  677. </p>
  678. </th>
  679. <th>
  680. <p>
  681. type of intervals
  682. </p>
  683. </th>
  684. <th>
  685. <p>
  686. memory allocation
  687. </p>
  688. </th>
  689. </tr></thead>
  690. <tbody>
  691. <tr>
  692. <td>
  693. <p>
  694. template parameter
  695. </p>
  696. </td>
  697. <td>
  698. <p>
  699. <code class="computeroutput"><span class="keyword">class</span></code>
  700. </p>
  701. </td>
  702. <td>
  703. <p>
  704. <code class="computeroutput"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span><span class="special">&gt;</span><span class="keyword">class</span></code>
  705. </p>
  706. </td>
  707. <td>
  708. <p>
  709. <code class="computeroutput"><span class="keyword">class</span></code>
  710. </p>
  711. </td>
  712. <td>
  713. <p>
  714. <code class="computeroutput"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span><span class="special">&gt;</span><span class="keyword">class</span></code>
  715. </p>
  716. </td>
  717. </tr>
  718. <tr>
  719. <td>
  720. <p>
  721. <code class="computeroutput"><a class="link" href="../boost/icl/interval.html" title="Struct template interval">interval</a></code>
  722. </p>
  723. </td>
  724. <td>
  725. <p>
  726. <code class="computeroutput"><span class="identifier">DomainT</span></code>
  727. </p>
  728. </td>
  729. <td>
  730. <p>
  731. <code class="computeroutput"><span class="identifier">Compare</span> <span class="special">=</span>
  732. <span class="identifier">std</span><span class="special">::</span><span class="identifier">less</span></code>
  733. </p>
  734. </td>
  735. <td>
  736. </td>
  737. <td>
  738. </td>
  739. </tr>
  740. <tr>
  741. <td>
  742. <p>
  743. <code class="computeroutput"><a class="link" href="../boost/icl/interval_base_set.html" title="Class template interval_base_set">interval_sets</a></code>
  744. </p>
  745. </td>
  746. <td>
  747. <p>
  748. <code class="computeroutput"><span class="identifier">DomainT</span></code>
  749. </p>
  750. </td>
  751. <td>
  752. <p>
  753. <code class="computeroutput"><span class="identifier">Compare</span> <span class="special">=</span>
  754. <span class="identifier">std</span><span class="special">::</span><span class="identifier">less</span></code>
  755. </p>
  756. </td>
  757. <td>
  758. <p>
  759. <code class="computeroutput"><span class="identifier">IntervalT</span> <span class="special">=</span>
  760. <span class="identifier">interval</span><span class="special">&lt;</span><span class="identifier">DomainT</span><span class="special">,</span><span class="identifier">Compare</span><span class="special">&gt;::</span><span class="identifier">type</span></code>
  761. </p>
  762. </td>
  763. <td>
  764. <p>
  765. <code class="computeroutput"><span class="identifier">Alloc</span> <span class="special">=</span>
  766. <span class="identifier">std</span><span class="special">::</span><span class="identifier">alloc</span></code>
  767. </p>
  768. </td>
  769. </tr>
  770. </tbody>
  771. </table></div>
  772. </div>
  773. <br class="table-break">
  774. </div>
  775. <div class="section">
  776. <div class="titlepage"><div><div><h4 class="title">
  777. <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>
  778. </h4></div></div></div>
  779. <p>
  780. The next two tables give an overview over <span class="emphasis"><em><span class="bold"><strong>map
  781. class templates</strong></span></em></span> of the icl.
  782. </p>
  783. <div class="table">
  784. <a name="boost_icl.interface.class_templates.maps.t0"></a><p class="title"><b>Table&#160;1.10.&#160;map class templates</b></p>
  785. <div class="table-contents"><table class="table" summary="map class templates">
  786. <colgroup>
  787. <col>
  788. <col>
  789. <col>
  790. </colgroup>
  791. <thead><tr>
  792. <th>
  793. <p>
  794. group
  795. </p>
  796. </th>
  797. <th>
  798. <p>
  799. template
  800. </p>
  801. </th>
  802. <th>
  803. <p>
  804. instance parameters
  805. </p>
  806. </th>
  807. </tr></thead>
  808. <tbody>
  809. <tr>
  810. <td>
  811. <p>
  812. <code class="computeroutput"><a class="link" href="../boost/icl/interval_base_map.html" title="Class template interval_base_map">interval_maps</a></code>
  813. </p>
  814. </td>
  815. <td>
  816. <p>
  817. <code class="computeroutput"><a class="link" href="../boost/icl/interval_map.html" title="Class template interval_map">interval_map</a></code>
  818. </p>
  819. </td>
  820. <td>
  821. <p>
  822. <code class="computeroutput"><span class="special">&lt;</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">&gt;</span></code>
  823. </p>
  824. </td>
  825. </tr>
  826. <tr>
  827. <td>
  828. </td>
  829. <td>
  830. <p>
  831. <code class="computeroutput"><a class="link" href="../boost/icl/split_interval_map.html" title="Class template split_interval_map">split_interval_map</a></code>
  832. </p>
  833. </td>
  834. <td>
  835. <p>
  836. <code class="computeroutput"><span class="special">&lt;</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">&gt;</span></code>
  837. </p>
  838. </td>
  839. </tr>
  840. <tr>
  841. <td>
  842. <p>
  843. <code class="computeroutput"><a class="link" href="../boost/icl/map.html" title="Class template map">icl::map</a></code>
  844. </p>
  845. </td>
  846. <td>
  847. <p>
  848. <code class="computeroutput"><a class="link" href="../boost/icl/map.html" title="Class template map">icl::map</a></code>
  849. </p>
  850. </td>
  851. <td>
  852. <p>
  853. <code class="computeroutput"><span class="special">&lt;</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">&gt;</span></code>
  854. </p>
  855. </td>
  856. </tr>
  857. </tbody>
  858. </table></div>
  859. </div>
  860. <br class="table-break"><p>
  861. Templates and template parameters, given in the preceding table are described
  862. 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>
  863. 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>
  864. 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>
  865. that all have equal template parameters.
  866. </p>
  867. <div class="table">
  868. <a name="boost_icl.interface.class_templates.maps.t1"></a><p class="title"><b>Table&#160;1.11.&#160;Parameters of map class templates</b></p>
  869. <div class="table-contents"><table class="table" summary="Parameters of map class templates">
  870. <colgroup>
  871. <col>
  872. <col>
  873. <col>
  874. <col>
  875. <col>
  876. <col>
  877. <col>
  878. <col>
  879. </colgroup>
  880. <thead><tr>
  881. <th>
  882. </th>
  883. <th>
  884. <p>
  885. elements
  886. </p>
  887. </th>
  888. <th>
  889. <p>
  890. mapped values
  891. </p>
  892. </th>
  893. <th>
  894. <p>
  895. traits
  896. </p>
  897. </th>
  898. <th>
  899. <p>
  900. order of elements
  901. </p>
  902. </th>
  903. <th>
  904. <p>
  905. aggregation propagation
  906. </p>
  907. </th>
  908. <th>
  909. <p>
  910. intersection propagation
  911. </p>
  912. </th>
  913. <th>
  914. <p>
  915. type of intervals
  916. </p>
  917. </th>
  918. <th>
  919. <p>
  920. memory allocation
  921. </p>
  922. </th>
  923. </tr></thead>
  924. <tbody>
  925. <tr>
  926. <td>
  927. <p>
  928. template parameter
  929. </p>
  930. </td>
  931. <td>
  932. <p>
  933. <code class="computeroutput"><span class="keyword">class</span></code>
  934. </p>
  935. </td>
  936. <td>
  937. <p>
  938. <code class="computeroutput"><span class="keyword">class</span></code>
  939. </p>
  940. </td>
  941. <td>
  942. <p>
  943. <code class="computeroutput"><span class="keyword">class</span></code>
  944. </p>
  945. </td>
  946. <td>
  947. <p>
  948. <code class="computeroutput"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span><span class="special">&gt;</span><span class="keyword">class</span></code>
  949. </p>
  950. </td>
  951. <td>
  952. <p>
  953. <code class="computeroutput"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span><span class="special">&gt;</span><span class="keyword">class</span></code>
  954. </p>
  955. </td>
  956. <td>
  957. <p>
  958. <code class="computeroutput"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span><span class="special">&gt;</span><span class="keyword">class</span></code>
  959. </p>
  960. </td>
  961. <td>
  962. <p>
  963. <code class="computeroutput"><span class="keyword">class</span></code>
  964. </p>
  965. </td>
  966. <td>
  967. <p>
  968. <code class="computeroutput"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span><span class="special">&gt;</span><span class="keyword">class</span></code>
  969. </p>
  970. </td>
  971. </tr>
  972. <tr>
  973. <td>
  974. <p>
  975. <code class="computeroutput"><a class="link" href="../boost/icl/interval_base_map.html" title="Class template interval_base_map">interval_maps</a></code>
  976. </p>
  977. </td>
  978. <td>
  979. <p>
  980. <code class="computeroutput"><span class="identifier">DomainT</span></code>
  981. </p>
  982. </td>
  983. <td>
  984. <p>
  985. <code class="computeroutput"><span class="identifier">CodomainT</span></code>
  986. </p>
  987. </td>
  988. <td>
  989. <p>
  990. <code class="computeroutput"><span class="identifier">Traits</span> <span class="special">=</span>
  991. <span class="identifier">identity_absorber</span></code>
  992. </p>
  993. </td>
  994. <td>
  995. <p>
  996. <code class="computeroutput"><span class="identifier">Compare</span> <span class="special">=</span>
  997. <span class="identifier">std</span><span class="special">::</span><span class="identifier">less</span></code>
  998. </p>
  999. </td>
  1000. <td>
  1001. <p>
  1002. <code class="computeroutput"><span class="identifier">Combine</span> <span class="special">=</span>
  1003. <span class="identifier">inplace_plus</span></code>
  1004. </p>
  1005. </td>
  1006. <td>
  1007. <p>
  1008. <code class="computeroutput"><span class="identifier">Section</span> <span class="special">=</span>
  1009. <span class="identifier">icl</span><span class="special">::</span><span class="identifier">inplace_et</span></code>
  1010. </p>
  1011. </td>
  1012. <td>
  1013. <p>
  1014. <code class="computeroutput"><span class="identifier">IntervalT</span> <span class="special">=</span>
  1015. <span class="identifier">interval</span><span class="special">&lt;</span><span class="identifier">DomainT</span><span class="special">,</span><span class="identifier">Compare</span><span class="special">&gt;::</span><span class="identifier">type</span></code>
  1016. </p>
  1017. </td>
  1018. <td>
  1019. <p>
  1020. <code class="computeroutput"><span class="identifier">Alloc</span> <span class="special">=</span>
  1021. <span class="identifier">std</span><span class="special">::</span><span class="identifier">alloc</span></code>
  1022. </p>
  1023. </td>
  1024. </tr>
  1025. <tr>
  1026. <td>
  1027. <p>
  1028. <code class="computeroutput"><a class="link" href="../boost/icl/map.html" title="Class template map">icl::map</a></code>
  1029. </p>
  1030. </td>
  1031. <td>
  1032. <p>
  1033. <code class="computeroutput"><span class="identifier">DomainT</span></code>
  1034. </p>
  1035. </td>
  1036. <td>
  1037. <p>
  1038. <code class="computeroutput"><span class="identifier">CodomainT</span></code>
  1039. </p>
  1040. </td>
  1041. <td>
  1042. <p>
  1043. <code class="computeroutput"><span class="identifier">Traits</span> <span class="special">=</span>
  1044. <span class="identifier">identity_absorber</span></code>
  1045. </p>
  1046. </td>
  1047. <td>
  1048. <p>
  1049. <code class="computeroutput"><span class="identifier">Compare</span> <span class="special">=</span>
  1050. <span class="identifier">std</span><span class="special">::</span><span class="identifier">less</span></code>
  1051. </p>
  1052. </td>
  1053. <td>
  1054. <p>
  1055. <code class="computeroutput"><span class="identifier">Combine</span> <span class="special">=</span>
  1056. <span class="identifier">inplace_plus</span></code>
  1057. </p>
  1058. </td>
  1059. <td>
  1060. <p>
  1061. <code class="computeroutput"><span class="identifier">Section</span> <span class="special">=</span>
  1062. <span class="identifier">icl</span><span class="special">::</span><span class="identifier">inplace_et</span></code>
  1063. </p>
  1064. </td>
  1065. <td>
  1066. <p>
  1067. <code class="computeroutput"><span class="identifier">Alloc</span> <span class="special">=</span>
  1068. <span class="identifier">std</span><span class="special">::</span><span class="identifier">alloc</span></code>
  1069. </p>
  1070. </td>
  1071. </tr>
  1072. </tbody>
  1073. </table></div>
  1074. </div>
  1075. <br class="table-break"><p>
  1076. Using the following placeholders,
  1077. </p>
  1078. <p>
  1079. </p>
  1080. <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>
  1081. <span class="identifier">C</span> <span class="special">:=</span> <span class="keyword">class</span> <span class="identifier">CodomainT</span><span class="special">,</span>
  1082. <span class="identifier">T</span> <span class="special">:=</span> <span class="keyword">class</span> <span class="identifier">Traits</span><span class="special">,</span>
  1083. <span class="identifier">cp</span> <span class="special">:=</span> <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">D</span><span class="special">&gt;</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>
  1084. <span class="identifier">cb</span> <span class="special">:=</span> <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">C</span><span class="special">&gt;</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>
  1085. <span class="identifier">s</span> <span class="special">:=</span> <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">C</span><span class="special">&gt;</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>
  1086. <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">&lt;</span><span class="identifier">D</span><span class="special">,</span><span class="identifier">cp</span><span class="special">&gt;::</span><span class="identifier">type</span>
  1087. <span class="identifier">a</span> <span class="special">:=</span> <span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span><span class="special">&gt;</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>
  1088. </pre>
  1089. <p>
  1090. </p>
  1091. <p>
  1092. we arrive at a final synoptical matrix of class templates and their parameters.
  1093. </p>
  1094. <pre class="programlisting">interval &lt;D, cp, &gt;
  1095. interval_sets&lt;D, cp, I, a &gt;
  1096. interval_maps&lt;D, C, T, cp, cb, s, I, a &gt;
  1097. icl::map &lt;D, C, T, cp, cb, s, a &gt;
  1098. </pre>
  1099. <p>
  1100. The choice of parameters and their positions follow the std::containers
  1101. as close a possible, so that usage of interval sets and maps does only
  1102. require minimal additional knowledge.
  1103. </p>
  1104. <p>
  1105. Additional knowledge is required when instantiating a comparison parameter
  1106. <code class="computeroutput"><span class="identifier">Compare</span></code> or an allocation
  1107. parameter <code class="computeroutput"><span class="identifier">Alloc</span></code>. In contrast
  1108. to std::containers these have to be instantiated as templates, like e.g.
  1109. </p>
  1110. <pre class="programlisting"><span class="identifier">interval_set</span><span class="special">&lt;</span><span class="identifier">string</span><span class="special">,</span> <span class="identifier">german_compare</span><span class="special">&gt;</span> <span class="identifier">sections</span><span class="special">;</span> <span class="comment">// 2nd parameter is a template</span>
  1111. <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">,</span> <span class="identifier">german_compare</span><span class="special">&lt;</span><span class="identifier">string</span><span class="special">&gt;</span> <span class="special">&gt;</span> <span class="identifier">words</span><span class="special">;</span> <span class="comment">// 2nd parameter is a type</span>
  1112. </pre>
  1113. <p>
  1114. </p>
  1115. </div>
  1116. </div>
  1117. </div>
  1118. <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
  1119. <td align="left"></td>
  1120. <td align="right"><div class="copyright-footer">Copyright &#169; 2007-2010 Joachim
  1121. Faulhaber<br>Copyright &#169; 1999-2006 Cortex Software
  1122. GmbH<p>
  1123. Distributed under the Boost Software License, Version 1.0. (See accompanying
  1124. 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>)
  1125. </p>
  1126. </div></td>
  1127. </tr></table>
  1128. <hr>
  1129. <div class="spirit-nav">
  1130. <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>
  1131. </div>
  1132. </body>
  1133. </html>