1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 2 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 3<html xmlns="http://www.w3.org/1999/xhtml"> 4<head> 5<meta name="generator" content="Bluefish 2.2.10" /> 6<meta http-equiv="Content-Type" content= 7"text/html; charset=us-ascii" /> 8<link rel="stylesheet" href="../../../../boost.css" type="text/css"/> 9<link rel="stylesheet" href="ublas.css" type="text/css" /> 10<script type="text/javascript" src="js/jquery-1.3.2.min.js" async="async" ></script> 11<script type="text/javascript" src="js/jquery.toc-gw.js" async="async" ></script> 12<script type="text/x-mathjax-config"> 13MathJax.Hub.Config({ 14 jax: ["input/TeX", "output/HTML-CSS"], 15 extensions: ["tex2jax.js"], 16 "HTML-CSS": { preferredFont: "TeX", availableFonts: ["STIX","TeX"], scale: "80" }, 17 tex2jax: { 18 inlineMath: [ ["$", "$"], ["\\(","\\)"] ], 19 displayMath: [ ["$$","$$"], ["\\[", "\\]"] ], 20 processEscapes: true, 21 ignoreClass: "tex2jax_ignore|dno" }, 22 TeX: { noUndefined: { attributes: { mathcolor: "red", mathbackground: "#FFEEEE", mathsize: "90%" } } }, 23 messageStyle: "none" 24 }); 25</script> 26<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js"></script> 27 28 29<title>Tensor</title> 30</head> 31<body> 32<h1><img src="../../../../boost.png" align="middle" />Tensor</h1> 33<div class="toc" id="toc"></div> 34<h2><a name="tensor"></a>Tensor</h2> 35<h4>Description</h4> 36<p>The templated class <code>tensor<value_t,format_t,storage_t></code> is the base container adaptor for dense tensors. 37Every element $t_{i_1,i_2,\dots,i_p}$ of a $p$-order $(n_1 \times n_2 \times \cdots \times n_p)$-dimensional tensor $T$ is mapped to $j$-th element of a one-dimensional container where $j = \sum_{r=1}^p i_r \cdot w_r$ with $1 \leq i_r \leq n_r $ for $1 \leq r \leq p$. 38For the first-order orientation $w_1 = 1$ and $w_k = n_{k-1} \cdot w_{k-1}$ for $k > 1$. For last-order orientation $w_p = 1$ and $ w_k = n_{k+1} \cdot w_{k+1}$ for $k < p$. 39</p> 40<h4>Example</h4> 41<pre> 42<b>#include</b> <boost/numeric/ublas/tensor.hpp> 43 44<b>int</b> main () { 45 <b>using namespace</b> boost::numeric::ublas; 46 tensor<<b>double</b>> t{4,2,3}; 47 <b>for</b> (<b>auto</b> k = 0ul; k < t.size (2); ++ k) 48 <b>for</b> (<b>auto</b> j = 0ul; j < t.size (1); ++ j) 49 <b>for</b> (<b>auto</b> i = 0ul; i < t.size (0); ++ i) 50 t.at(i,j,k) = 3*i + 2*j + 5*k; 51 52 std::cout << t << std::endl; 53} 54</pre> 55 56<h4>Definition</h4> 57<p>Defined in the header file <code>tensor/tensor.hpp</code>.</p> 58 59<h4>Model of</h4> 60<p><a href="container_concept.html#tensor">Tensor</a></p> 61 62<h4>Type requirements</h4> 63<p>None, except for those imposed by the requirements of <a href="container_concept.html#tensor">Tensor</a> .</p> 64 65<h4>Public base classes</h4> 66<p><code>tensor_container<tensor<value_t,format_t,storage_t> ></code></p> 67 68<h4>Template parameters</h4> 69<table border="1" summary="parameters"> 70<tbody> 71<tr> 72<th>Parameter</th> 73<th>Description</th> 74<th>Default</th> 75</tr> 76<tr> 77<td><code>value_t</code></td> 78<td>The type of object stored in the tensor.</td> 79<td></td> 80</tr> 81<tr> 82<td><code>format_t</code></td> 83<td>Storage organization. <a href= 84"#tensor_1">[1]</a></td> 85<td><code>first_order</code></td> 86</tr> 87<tr> 88<td><code>storage_t</code></td> 89<td>The type of the Storage array. <a href="#tensor_2">[2]</a></td> 90<td><code>std::vector<value_t></code></td> 91</tr> 92</tbody> 93</table> 94 95<h4>Member types</h4> 96<table border="1" style="font-size:100%" summary="members"> 97<tbody style="font-size:100%" > 98<tr> 99<th>Member type</th> 100<th>Description</th> 101</tr> 102<tr> 103<td><code>value_type</code></td> 104<td>Type <code>value_t</code> of the tensor elements.</td> 105</tr> 106<tr> 107<td><code>layout_type</code></td> 108<td>Format of the tensor which is either <code>first_order</code> or <code>last_order</code>.</td> 109</tr> 110<tr> 111<td><code>array_type</code></td> 112<td>Sequence container type that stores all tensor elements and is accessible with a single index.</td> 113</tr> 114 115<tr> 116<td><code>strides_type</code></td> 117<td>Type of the strides vector <code>basic_strides<std::size_t,layout_type></code> that stores all tensor elements and is accessible with a single index.</td> 118</tr> 119 120<tr> 121<td><code>extents_type</code></td> 122<td>Type of the dimension extents vector <code>shape</code> that stores all tensor elements and is accessible with a single index.</td> 123</tr> 124 125 126<tr> 127<td><code>size_type</code></td> 128<td>Unsigned integer which is usually <code>std::size_t</code>.</td> 129</tr> 130<tr> 131<td><code>difference_type</code></td> 132<td>Unsigned integer which is usually <code>std::ptrdiff_t</code>.</td> 133</tr> 134<tr> 135<td><code>reference</code></td> 136<td>Reference type <code>storage_type::reference</code> which is in most cases <code>value_type&</code>.</td> 137</tr> 138<tr> 139<td><code>const_reference</code></td> 140<td>Constant reference type <code>storage_type::const_reference</code> which is in most cases <code>const value_type&</code>.</td> 141</tr> 142<tr> 143<td><code>pointer</code></td> 144<td>Pointer type <code>storage_type::pointer</code> which is in most cases <code>value_type*</code>.</td> 145</tr> 146<tr> 147<td><code>const_pointer</code></td> 148<td>Constant reference type <code>storage_type::const_reference</code> which is in most cases <code>const value_type*</code>.</td> 149</tr> 150<tr> 151<td><code>iterator</code></td> 152<td>RandomAccessIterator <code>storage_type::iterator</code>.</td> 153</tr> 154<tr> 155<td><code>const_iterator</code></td> 156<td>Constant RandomAccessIterator <code>storage_type::const_iterator</code>.</td> 157</tr> 158<tr> 159<td><code>reverse_iterator</code></td> 160<td>Reverse RandomAccessIterator <code>storage_type::reverse_iterator</code>.</td> 161</tr> 162<tr> 163<td><code>const_reverse_iterator</code></td> 164<td>Reverse RandomAccessIterator <code>storage_type::const_reverse_iterator</code>.</td> 165</tr> 166 167<tr> 168<td><code>matrix_type</code></td> 169<td>Type of the matrix <code>matrix<value_type,layout_type,array_type></code> with which the tensor type interacts.</td> 170</tr> 171<tr> 172<td><code>vector_type</code></td> 173<td>Type of the vector <code>matrix<value_type,layout_type,array_type></code> with which the tensor type interacts.</td> 174</tr> 175</tbody> 176</table> 177 178<h4>Alias templates</h4> 179<table border="1" style="font-size:100%" summary="members"> 180<tbody style="font-size:100%" > 181<tr> 182<th>Alias template</th> 183<th>Description</th> 184<tr> 185<td><code>template<class derived_type> <br> using tensor_expression_type = detail::tensor_expression<self_type,derived_type></code></td> 186<td>Type of <a href= "tensor/tensor_expression.html#tensor_expression">tensor_expression</a> where <code>self_type</code> is the <code>tensor</code> type.</td> 187</tr> 188<tr> 189<td><code>template<class derived_type> <br> using matrix_expression_type = matrix_expression<derived_type></code></td> 190<td>Type of <a href= "matrix_expression.html#matrix_expression">matrix_expression</a>.</td> 191</tr> 192<tr> 193<td><code>template<class derived_type> <br> using vector_expression_type = vector_expression<derived_type></code></td> 194<td>Type of <a href= "vector_expression.html#vector_expression">vector_expression</a>.</td> 195</tr> 196</tbody> 197</table> 198 199 200<h3>Member Functions</h3> 201 202<h4>Construction</h4> 203 204 205<table border="1" style="font-size:100%" summary="constructors"> 206<tbody style="font-size:100%" > 207<tr> 208<th>Member function</th> 209<th>Description</th> 210</tr> 211<tr> 212<td><code>tensor ()</code></td> 213<td>Constructs an uninitialized <code>tensor</code> that holds zero elements.</td> 214</tr> 215<tr> 216<td><code> tensor (std::initializer_list<size_type> list) </code></td> 217<td>Constructs an uninitialized <code>tensor</code> where <code>list</code> specifies the dimension <a href="tensor/extents.html">extents</a>.</td> 218</tr> 219<tr> 220<td><code> tensor (extents_type const& s) </code></td> 221<td>Constructs an uninitialized <code>tensor</code> where 222<code>s</code> specifies the dimension <a href="tensor/extents.html">extents</a>.</td> 223</tr> 224<tr> 225<td><code> tensor (extents_type const& e, array_type const& a) </code></td> 226<td>Constructs an uninitialized <code>tensor</code> where 227<code>e</code> specifies the dimension <a href="tensor/extents.html">extents</a> and <code>a</code> the data elements of the tensor.</td> 228</tr> 229 230<tr> 231<td><code>tensor (tensor<value_type,other_layout&rt; const& other)</code></td> 232<td>Constructs tensor by copying elements from <code>other</code> where the layout is different from this layout type.</td> 233</tr> 234 235<tr> 236<td><code>tensor (tensor const& other)</code></td> 237<td>Constructs tensor by copying elements from <code>other</code>.</td> 238</tr> 239 240<tr> 241<td><code>tensor (tensor && other)</code></td> 242<td>Constructs tensor by moving elements from <code>other</code>.</td> 243</tr> 244 245<tr> 246<td><code>tensor (matrix_type const& other)</code></td> 247<td>Constructs tensor by copying elements from <code>other</code> <a href="matrix.html">matrix</a>. The tensor will have the order 2.</td> 248</tr> 249<tr> 250<td><code>tensor (matrix_type && other)</code></td> 251<td>Constructs tensor by moving elements from <code>other</code> <a href="matrix.html">matrix</a>. The tensor will have the order 2.</td> 252</tr> 253 254<tr> 255<td><code>tensor (vector_type const& other)</code></td> 256<td>Constructs tensor by copying elements from <code>other</code> <a href="vector.html">vector</a>. The tensor will have the order 1.</td> 257</tr> 258<tr> 259<td><code>tensor (vector_type && other)</code></td> 260<td>Constructs tensor by moving elements from <code>other</code> <a href="vector.html">vector</a>. The tensor will have the order 1.</td> 261</tr> 262 263<tr> 264<td><code>tensor (tensor_expression_type<derived_type> const& expr)</code></td> 265<td>Constructs tensor by evaluating the <a href="tensor/tensor_expression.html">tensor expression</a> <code>expr</code> and copying all elements of the result.</td> 266</tr> 267 268<tr> 269<td><code>tensor (matrix_expression_type<derived_type> const& expr)</code></td> 270<td>Constructs tensor by evaluating the <a href="matrix_expression.html">matrix expression</a> <code>expr</code> and copying all elements of the result.</td> 271</tr> 272 273<tr> 274<td><code>tensor (vector_expression_type<derived_type> const& expr)</code></td> 275<td>Constructs tensor by evaluating the <a href="vector_expression.html">vector expression</a> <code>expr</code> and copying all elements of the result.</td> 276</tr> 277 278</tbody> 279</table> 280<!--------------------------------------------> 281 282<h4>Assignment</h4> 283 284 285<table border="1" style="font-size:100%" summary="constructors"> 286<tbody style="font-size:100%" > 287<tr> 288<th>Member function</th> 289<th>Description</th> 290</tr> 291<tr> 292<td><code>tensor& operator=(tensor_expression_type<derived_type> const& expr)</code></td> 293<td>Evaluates the <a href="tensor/tensor_expression.html">tensor expression</a> <code>expr</code> and copyies all elements of the result.</td> 294</tr> 295 296<tr> 297<td><code>tensor& operator=(tensor other)</code></td> 298<td>Copies or moves elements of <code>other</code>.</td> 299</tr> 300 301<tr> 302<td><code>tensor& operator=(const_reference v)</code></td> 303<td>Initialiates all elements of a tensor with <code>v</code>.</td> 304</tr> 305</tbody> 306</table> 307<!--------------------------------------------> 308 309<h4>Capacity</h4> 310 311<table border="1" style="font-size:100%" summary="capacity"> 312<tbody style="font-size:100%" > 313<tr> 314<th>Member function</th> 315<th>Description</th> 316</tr> 317<tr> 318<td><code>bool empty() const</code></td> 319<td>Returns true if a tensor has zero elements.</td> 320</tr> 321 322<tr> 323<td><code>size_type size() const</code></td> 324<td>Returns the number of elements of the tensor.</td> 325</tr> 326 327<tr> 328<td><code>size_type rank() const</code></td> 329<td>Returns the number of dimensions of the tensor.</td> 330</tr> 331 332<tr> 333<td><code>size_type order() const</code></td> 334<td>Returns the number of dimensions of the tensor.</td> 335</tr> 336 337<tr> 338<td><code>strides_type const& strides() const</code></td> 339<td>Returns a constant reference to the <a href="tensor/strides.html">strides</a> of the tensor.</td> 340</tr> 341 342<tr> 343<td><code>extents_type const& extents() const</code></td> 344<td>Returns a constant reference to the <a href="tensor/extents.html">extents</a> of the tensor.</td> 345</tr> 346</tbody> 347</table> 348 349<!--------------------------------------------> 350 351<h4>Element access</h4> 352 353<table border="1" style="font-size:100%" summary="capacity"> 354<tbody style="font-size:100%" > 355<tr> 356<th>Member function</th> 357<th>Description</th> 358</tr> 359 360<tr> 361<td><code>pointer data()</code></td> 362<td>Returns a <code>pointer</code> the first element of the tensor.</td> 363</tr> 364 365<tr> 366<td><code>const_pointer data() const</code></td> 367<td>Returns a <code>const_pointer</code> the first element of the tensor.</td> 368</tr> 369 370<tr> 371<td><code>reference operator[](size_type j)</code></td> 372<td>Returns a <code>reference</code> to the <code>j</code>-th element of the storage array of the tensor. Corresponds to the function call <code>tensor::data()+j</code></td> 373</tr> 374 375<tr> 376<td><code>const_reference operator[](size_type j) const</code></td> 377<td>Returns a <code>const_reference</code> to the <code>j</code>-th element of the storage array of the tensor. Corresponds to the function call <code>tensor::data()+j</code>.</td> 378</tr> 379 380 381<tr> 382<td><code>template<class ... size_types> <br> reference at(size_type i, size_types ... is)</code></td> 383<td>Returns a <code>reference</code> to the <code>(i,is...)</code>-th element of the tensor where <code> (i,is...)</code> denotes a multi-index with <code>tensor::order()</code> elements. If <code>sizeof...(is)==0</code>, <code>tensor::operator[i]</code> is called. </td> 384</tr> 385 386<tr> 387<td><code>template<class ... size_types> <br> const_reference at(size_type i, size_types ... is)</code></td> 388<td>Returns a <code>const_reference</code> to the <code>(i,is...)</code>-th element of the tensor where <code> (i,is...)</code> denotes a multi-index with <code>tensor::order()</code> elements. If <code>sizeof...(is)==0</code>, <code>tensor::operator[i]</code> is called. </td> 389</tr> 390 391</tbody> 392</table> 393 394 395<!--------------------------------------------> 396 397<h4>Proxy Generation</h4> 398 399<table border="1" style="font-size:100%" summary="capacity"> 400<tbody style="font-size:100%" > 401<tr> 402<th>Member function</th> 403<th>Description</th> 404</tr> 405 406<tr> 407<td><code>template<std::size_t I, class ... index_types> <br> tensor_index operator()(indices::Index<I> p, index_types ... ps)</code></td> 408<td>Returns a <a href="tensor/tensor_index.html">tensor index</a> instance with index objects <code>(p,ps...)</code> for a tensor contraction where <code>sizeof...(ps)+1</code> must be equal to <code>tensor::order()</code>.</td> 409</tr> 410 411</tbody> 412</table> 413 414 415<h4>Iterators</h4> 416 417<table border="1" style="font-size:100%" summary="iterators"> 418<tbody style="font-size:100%" > 419<tr> 420<th>Member function</th> 421<th>Description</th> 422</tr> 423 424<tr> 425<td><code>const_iterator begin() const</code></td> 426<td>Returns a const_iterator pointing to the first element of the tensor.</td> 427</tr> 428 429<tr> 430<td><code>const_iterator cbegin() const</code></td> 431<td>Returns a const_iterator pointing to the first element of the tensor.</td> 432</tr> 433 434<tr> 435<td><code>iterator begin()</code></td> 436<td>Returns an iterator pointing to the first element of the tensor.</td> 437</tr> 438 439 440<tr> 441<td><code>const_iterator end() const</code></td> 442<td>Returns a const_iterator pointing to the position after the last element of the tensor.</td> 443</tr> 444 445<tr> 446<td><code>const_iterator cend() const</code></td> 447<td>Returns a const_iterator pointing to the position after the last element of the tensor.</td> 448</tr> 449 450<tr> 451<td><code>iterator begin()</code></td> 452<td>Returns an iterator pointing to the position after the last element of the tensor.</td> 453</tr> 454 455</tbody> 456</table> 457 458 459<h4>Modifiers</h4> 460 461<table border="1" style="font-size:100%" summary="modifiers"> 462<tbody style="font-size:100%" > 463<tr> 464<th>Member function</th> 465<th>Description</th> 466</tr> 467 468<tr> 469<td><code>void reshape(extents_type const& e, value_type v = value_type{})</code></td> 470<td>Reshapes the tensor according to the extents <code>e</code>. If <code>e.product()</code> is greater than <code>tensor::size()</code>, the tensor is resized with <code>v</code>. </td> 471</tr> 472 473</tbody> 474</table> 475 476 477<h4>Notes</h4> 478<p><a name="tensor_1">[1]</a> Supported parameters 479for the storage organization are <code>first_order</code> and 480<code>last_order</code>.</p> 481<p><a name="tensor_2">[2]</a> Common parameters 482for the storage array are <code>std::array<N,T></code> and 483<code>std::vector<T></code>.</p> 484<!-- ---------------------------------------------------- 485<h2><a name="identity_tensor"></a>Identity Tensor</h2> 486<h4>Description</h4> 487<p>The templated class <code>identity_tensor<T, ALLOC></code> 488represents identity matrices. For a <em>(m x n</em>)-dimensional 489identity tensor and <em>0 <= i < m</em>, <em>0 <= j < 490n</em> holds <em>id</em><sub><em>i, j</em></sub> <em>= 0</em>, if 491<em>i <> j</em>, and <em>id</em><sub><em>i, i</em></sub><em>= 4921</em>.</p> 493<h4>Example</h4> 494<pre> 495#include <boost/numeric/ublas/tensor.hpp> 496#include <boost/numeric/ublas/io.hpp> 497 498int main () { 499 using namespace boost::numeric::ublas; 500 identity_tensor<double> m (3); 501 std::cout << m << std::endl; 502} 503</pre> 504<h4>Definition</h4> 505<p>Defined in the header tensor.hpp.</p> 506<h4>Template parameters</h4> 507<table border="1" summary="parameters"> 508<tbody> 509<tr> 510<th>Parameter</th> 511<th>Description</th> 512<th>Default</th> 513</tr> 514<tr> 515<td><code>T</code></td> 516<td>The type of object stored in the tensor.</td> 517<td><code>int</code></td> 518</tr> 519<tr> 520<td><code>ALLOC</code></td> 521<td>An STL Allocator for size_type and difference_type.</td> 522<td>std::allocator</td> 523</tr> 524</tbody> 525</table> 526<h4>Model of</h4> 527<p><a href="container_concept.html#tensor">Tensor</a> .</p> 528<h4>Type requirements</h4> 529<p>None, except for those imposed by the requirements of 530<a href="container_concept.html#tensor">Tensor</a> .</p> 531<h4>Public base classes</h4> 532<p><code>tensor_container<identity_tensor<T> 533></code></p> 534<h4>Members</h4> 535<table border="1" summary="members"> 536<tbody> 537<tr> 538<th>Member</th> 539<th>Description</th> 540</tr> 541<tr> 542<td><code>identity_tensor ()</code></td> 543<td>Constructs an <code>identity_tensor</code> that holds zero rows 544of zero elements.</td> 545</tr> 546<tr> 547<td><code>identity_tensor (size_type size)</code></td> 548<td>Constructs an <code>identity_tensor</code> that holds 549<code>size</code> rows of <code>size</code> elements.</td> 550</tr> 551<tr> 552<td><code>identity_tensor (const identity_tensor 553&m)</code></td> 554<td>The copy constructor.</td> 555</tr> 556<tr> 557<td><code>void resize (size_type size, bool preserve = 558true)</code></td> 559<td>Resizes a <code>identity_tensor</code> to hold 560<code>size</code> rows of <code>size</code> elements. Therefore the 561existing elements of the <code>itendity_tensor</code> are always 562preseved.</td> 563</tr> 564<tr> 565<td><code>size_type size1 () const</code></td> 566<td>Returns the number of rows.</td> 567</tr> 568<tr> 569<td><code>size_type size2 () const</code></td> 570<td>Returns the number of columns.</td> 571</tr> 572<tr> 573<td><code>const_reference operator () (size_type i, size_type j) 574const</code></td> 575<td>Returns the value of the <code>j</code>-th element in the 576<code>i</code>-th row.</td> 577</tr> 578<tr> 579<td><code>identity_tensor &operator = (const identity_tensor 580&m)</code></td> 581<td>The assignment operator.</td> 582</tr> 583<tr> 584<td><code>identity_tensor &assign_temporary (identity_tensor 585&m)</code></td> 586<td>Assigns a temporary. May change the identity tensor 587<code>m</code> .</td> 588</tr> 589<tr> 590<td><code>void swap (identity_tensor &m)</code></td> 591<td>Swaps the contents of the identity matrices.</td> 592</tr> 593<tr> 594<td><code>const_iterator1 begin1 () const</code></td> 595<td>Returns a <code>const_iterator1</code> pointing to the 596beginning of the <code>identity_tensor</code>.</td> 597</tr> 598<tr> 599<td><code>const_iterator1 end1 () const</code></td> 600<td>Returns a <code>const_iterator1</code> pointing to the end of 601the <code>identity_tensor</code>.</td> 602</tr> 603<tr> 604<td><code>const_iterator2 begin2 () const</code></td> 605<td>Returns a <code>const_iterator2</code> pointing to the 606beginning of the <code>identity_tensor</code>.</td> 607</tr> 608<tr> 609<td><code>const_iterator2 end2 () const</code></td> 610<td>Returns a <code>const_iterator2</code> pointing to the end of 611the <code>identity_tensor</code>.</td> 612</tr> 613<tr> 614<td><code>const_reverse_iterator1 rbegin1 () const</code></td> 615<td>Returns a <code>const_reverse_iterator1</code> pointing to the 616beginning of the reversed <code>identity_tensor</code>.</td> 617</tr> 618<tr> 619<td><code>const_reverse_iterator1 rend1 () const</code></td> 620<td>Returns a <code>const_reverse_iterator1</code> pointing to the 621end of the reversed <code>identity_tensor</code>.</td> 622</tr> 623<tr> 624<td><code>const_reverse_iterator2 rbegin2 () const</code></td> 625<td>Returns a <code>const_reverse_iterator2</code> pointing to the 626beginning of the reversed <code>identity_tensor</code>.</td> 627</tr> 628<tr> 629<td><code>const_reverse_iterator2 rend2 () const</code></td> 630<td>Returns a <code>const_reverse_iterator2</code> pointing to the 631end of the reversed <code>identity_tensor</code>.</td> 632</tr> 633</tbody> 634</table> 635---------------------------------------------------- 636--> 637<hr/> 638<p>Copyright (©) 2018 Cem Bassoy<br /> 639 Use, modification and distribution are subject to the 640 Boost Software License, Version 1.0. 641 (See accompanying file LICENSE_1_0.txt 642 or copy at <a href="http://www.boost.org/LICENSE_1_0.txt"> 643 http://www.boost.org/LICENSE_1_0.txt 644 </a>). 645</p> 646<script type="text/javascript"> 647(function($) { 648 $('#toc').toc(); 649})(jQuery); 650</script> 651</body> 652</html> 653