Sophie

Sophie

distrib > Fedora > 14 > x86_64 > media > updates > by-pkgid > 88959ca903fe50462ea99715ead18944 > files > 172

raul-devel-0.7.0-1.fc14.1.x86_64.rpm

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>RAUL: Raul::Table&lt; K, T &gt; Class Template Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<!-- Generated by Doxygen 1.7.1 -->
<div class="navigation" id="top">
  <div class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
      <li><a href="modules.html"><span>Modules</span></a></li>
      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
      <li><a href="files.html"><span>Files</span></a></li>
    </ul>
  </div>
  <div class="tabs2">
    <ul class="tablist">
      <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
      <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
      <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
    </ul>
  </div>
  <div class="navpath">
    <ul>
      <li><b>Raul</b>      </li>
      <li><a class="el" href="classRaul_1_1Table.html">Raul::Table&lt; K, T &gt;</a>      </li>
    </ul>
  </div>
</div>
<div class="header">
  <div class="summary">
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="#friends">Friends</a>  </div>
  <div class="headertitle">
<h1>Raul::Table&lt; K, T &gt; Class Template Reference</h1>  </div>
</div>
<div class="contents">
<!-- doxytag: class="Raul::Table" -->
<p>Slow insertion, fast lookup, cache optimized, super fast sorted iteration.  
<a href="#_details">More...</a></p>

<p><code>#include &lt;<a class="el" href="Table_8hpp_source.html">Table.hpp</a>&gt;</code></p>

<p><a href="classRaul_1_1Table-members.html">List of all members.</a></p>
<table class="memberdecls">
<tr><td colspan="2"><h2><a name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af54b0b41cb823fa8f1fd9da7642b949b"></a><!-- doxytag: member="Raul::Table::Table" ref="af54b0b41cb823fa8f1fd9da7642b949b" args="(size_t capacity)" -->
&nbsp;</td><td class="memItemRight" valign="bottom"><b>Table</b> (size_t capacity)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a424651fa52839f1d26c2e5a3e30b6ded"></a><!-- doxytag: member="Raul::Table::clear" ref="a424651fa52839f1d26c2e5a3e30b6ded" args="()" -->
void&nbsp;</td><td class="memItemRight" valign="bottom"><b>clear</b> ()</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa0cc7e25f692da913ebc507645f65fa5"></a><!-- doxytag: member="Raul::Table::empty" ref="aa0cc7e25f692da913ebc507645f65fa5" args="() const " -->
bool&nbsp;</td><td class="memItemRight" valign="bottom"><b>empty</b> () const </td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a36da309c8f5091e3e5409a12a6aa36b2"></a><!-- doxytag: member="Raul::Table::reserve" ref="a36da309c8f5091e3e5409a12a6aa36b2" args="(size_t n)" -->
void&nbsp;</td><td class="memItemRight" valign="bottom"><b>reserve</b> (size_t n)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="abed95d4acc53bfaa2c0f3ebaa027e26e"></a><!-- doxytag: member="Raul::Table::size" ref="abed95d4acc53bfaa2c0f3ebaa027e26e" args="() const " -->
size_t&nbsp;</td><td class="memItemRight" valign="bottom"><b>size</b> () const </td></tr>
<tr><td class="memItemLeft" align="right" valign="top">std::pair&lt; iterator, bool &gt;&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classRaul_1_1Table.html#a31e420e7176789d39f88fc391e5144cd">insert</a> (const std::pair&lt; K, T &gt; &amp;entry)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Add an item to the table, using <em>entry.first</em> as the search key.  <a href="#a31e420e7176789d39f88fc391e5144cd"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab0f457125e4557677cc4331a9d9e1d2a"></a><!-- doxytag: member="Raul::Table::erase" ref="ab0f457125e4557677cc4331a9d9e1d2a" args="(const K &amp;key)" -->
void&nbsp;</td><td class="memItemRight" valign="bottom"><b>erase</b> (const K &amp;key)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5cc01ba2dce63a8358ac312d6fbe2be6"></a><!-- doxytag: member="Raul::Table::erase" ref="a5cc01ba2dce63a8358ac312d6fbe2be6" args="(iterator i)" -->
void&nbsp;</td><td class="memItemRight" valign="bottom"><b>erase</b> (iterator i)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a41b871ba34bfefdbd8427bfa79eae8fc"></a><!-- doxytag: member="Raul::Table::erase" ref="a41b871ba34bfefdbd8427bfa79eae8fc" args="(iterator start, iterator end)" -->
void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classRaul_1_1Table.html#a41b871ba34bfefdbd8427bfa79eae8fc">erase</a> (iterator start, iterator end)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Erase a range of elements from <em>first</em> to <em>last</em>, including first but not including last. <br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1bc42977f8be398f35527a77614a9250"></a><!-- doxytag: member="Raul::Table::erase_by_index" ref="a1bc42977f8be398f35527a77614a9250" args="(size_t start, size_t end)" -->
void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classRaul_1_1Table.html#a1bc42977f8be398f35527a77614a9250">erase_by_index</a> (size_t start, size_t end)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Erase a range of elements from <em>first_index</em> to <em>last_index</em>, including first_index but not including last_index. <br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4d2e5cc4364c35ff35e5f0d2e1704822"></a><!-- doxytag: member="Raul::Table::yank" ref="a4d2e5cc4364c35ff35e5f0d2e1704822" args="(iterator start, iterator end)" -->
SharedPtr&lt; <a class="el" href="classRaul_1_1Table.html">Table</a>&lt; K, T &gt; &gt;&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classRaul_1_1Table.html#a4d2e5cc4364c35ff35e5f0d2e1704822">yank</a> (iterator start, iterator end)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Erase and return a range of entries. <br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">std::pair&lt; iterator, bool &gt;&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classRaul_1_1Table.html#ac163ceab6c10c10b69016fede580c888">cram</a> (const <a class="el" href="classRaul_1_1Table.html">Table</a>&lt; K, T &gt; &amp;range)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Cram a range of entries back in.  <a href="#ac163ceab6c10c10b69016fede580c888"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9128fe7b2e9ef926e8de6dffb9962fa8"></a><!-- doxytag: member="Raul::Table::find" ref="a9128fe7b2e9ef926e8de6dffb9962fa8" args="(const_iterator start, const_iterator end, const K &amp;key) const " -->
const_iterator&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classRaul_1_1Table.html#a9128fe7b2e9ef926e8de6dffb9962fa8">find</a> (const_iterator start, const_iterator end, const K &amp;key) const </td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Binary search (O(log(end - start))). <br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a67bca2f3ec346d5ebc417fe60dbd7768"></a><!-- doxytag: member="Raul::Table::find" ref="a67bca2f3ec346d5ebc417fe60dbd7768" args="(const K &amp;key) const " -->
const_iterator&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classRaul_1_1Table.html#a67bca2f3ec346d5ebc417fe60dbd7768">find</a> (const K &amp;key) const </td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Binary search (O(log(n))). <br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2063735733be69268e5f14c8b86219b2"></a><!-- doxytag: member="Raul::Table::find" ref="a2063735733be69268e5f14c8b86219b2" args="(const_iterator start, const_iterator end, const K &amp;key)" -->
iterator&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classRaul_1_1Table.html#a2063735733be69268e5f14c8b86219b2">find</a> (const_iterator start, const_iterator end, const K &amp;key)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Binary search (O(log(end - start))). <br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a61792cb9540eb1859da47a38f4baa3c2"></a><!-- doxytag: member="Raul::Table::find" ref="a61792cb9540eb1859da47a38f4baa3c2" args="(const K &amp;key)" -->
iterator&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classRaul_1_1Table.html#a61792cb9540eb1859da47a38f4baa3c2">find</a> (const K &amp;key)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Binary search (O(log(n))). <br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">const_iterator&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classRaul_1_1Table.html#a36c21ad901a72be1c94391660cd696d1">find_range_end</a> (const_iterator left, bool(*comp)(const K &amp;, const K &amp;)) const </td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Find the end of a range using a custom comparator.  <a href="#a36c21ad901a72be1c94391660cd696d1"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">iterator&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classRaul_1_1Table.html#ad54943efbc3ac317034e134e1c0aa14f">find_range_end</a> (iterator left, bool(*comp)(const K &amp;, const K &amp;))</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Find the end of a range using a custom comparator.  <a href="#ad54943efbc3ac317034e134e1c0aa14f"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">T &amp;&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classRaul_1_1Table.html#ac1a5714461807b88759f4e94cf538d22">operator[]</a> (const K &amp;key)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Insert an item, and return a reference to it's value.  <a href="#ac1a5714461807b88759f4e94cf538d22"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a084cf6b32278198ac025e67f6d6ba7e8"></a><!-- doxytag: member="Raul::Table::begin" ref="a084cf6b32278198ac025e67f6d6ba7e8" args="() const " -->
const_iterator&nbsp;</td><td class="memItemRight" valign="bottom"><b>begin</b> () const </td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a54cca4571a4d21d0cde723fe66c71300"></a><!-- doxytag: member="Raul::Table::end" ref="a54cca4571a4d21d0cde723fe66c71300" args="() const " -->
const_iterator&nbsp;</td><td class="memItemRight" valign="bottom"><b>end</b> () const </td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ada291358176d0b0a097eed19699b15ca"></a><!-- doxytag: member="Raul::Table::begin" ref="ada291358176d0b0a097eed19699b15ca" args="()" -->
iterator&nbsp;</td><td class="memItemRight" valign="bottom"><b>begin</b> ()</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acc8b1bf2a5f3caf2be04580781360df3"></a><!-- doxytag: member="Raul::Table::end" ref="acc8b1bf2a5f3caf2be04580781360df3" args="()" -->
iterator&nbsp;</td><td class="memItemRight" valign="bottom"><b>end</b> ()</td></tr>
<tr><td colspan="2"><h2><a name="friends"></a>
Friends</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a67171474c4da6cc8efe0c7fafefd2b2d"></a><!-- doxytag: member="Raul::Table::iterator" ref="a67171474c4da6cc8efe0c7fafefd2b2d" args="" -->
class&nbsp;</td><td class="memItemRight" valign="bottom"><b>iterator</b></td></tr>
</table>
<hr/><a name="_details"></a><h2>Detailed Description</h2>
<h3>template&lt;typename K, typename T&gt;<br/>
 class Raul::Table&lt; K, T &gt;</h3>

<p>Slow insertion, fast lookup, cache optimized, super fast sorted iteration. </p>
<p>This has the advantage over std::map that iterating over the collection is fast and sorted. Possibly also faster in some situations due to all data being in a single chunk of memory, cache optimized, etc. </p>
<hr/><h2>Member Function Documentation</h2>
<a class="anchor" id="a31e420e7176789d39f88fc391e5144cd"></a><!-- doxytag: member="Raul::Table::insert" ref="a31e420e7176789d39f88fc391e5144cd" args="(const std::pair&lt; K, T &gt; &amp;entry)" -->
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename K, typename T&gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">std::pair&lt; typename <a class="el" href="classRaul_1_1Table.html">Table</a>&lt; K, T &gt;::iterator, bool &gt; <a class="el" href="classRaul_1_1Table.html">Raul::Table</a>&lt; K, T &gt;::insert </td>
          <td>(</td>
          <td class="paramtype">const std::pair&lt; K, T &gt; &amp;&nbsp;</td>
          <td class="paramname"> <em>entry</em></td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Add an item to the table, using <em>entry.first</em> as the search key. </p>
<p>An iterator to the element where value was set is returned, and a bool which is true if an insertion took place, or false if an existing entry was updated. Matches std::map::insert interface. O(n) worst case O(log(n)) best case (capacity is large enough) </p>

<p>Referenced by <a class="el" href="classRaul_1_1Table.html#ac163ceab6c10c10b69016fede580c888">Raul::Table&lt; K, T &gt;::cram()</a>, and <a class="el" href="classRaul_1_1Table.html#ac1a5714461807b88759f4e94cf538d22">Raul::Table&lt; K, T &gt;::operator[]()</a>.</p>

</div>
</div>
<a class="anchor" id="ac163ceab6c10c10b69016fede580c888"></a><!-- doxytag: member="Raul::Table::cram" ref="ac163ceab6c10c10b69016fede580c888" args="(const Table&lt; K, T &gt; &amp;range)" -->
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename K, typename T&gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">std::pair&lt; typename <a class="el" href="classRaul_1_1Table.html">Table</a>&lt; K, T &gt;::iterator, bool &gt; <a class="el" href="classRaul_1_1Table.html">Raul::Table</a>&lt; K, T &gt;::cram </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classRaul_1_1Table.html">Table</a>&lt; K, T &gt; &amp;&nbsp;</td>
          <td class="paramname"> <em>range</em></td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Cram a range of entries back in. </p>
<p>Range MUST follow the same ordering guidelines as find_range_end. Return type is the same as insert, iterator points to first inserted entry </p>

<p>References <a class="el" href="classRaul_1_1Table.html#a31e420e7176789d39f88fc391e5144cd">Raul::Table&lt; K, T &gt;::insert()</a>.</p>

</div>
</div>
<a class="anchor" id="a36c21ad901a72be1c94391660cd696d1"></a><!-- doxytag: member="Raul::Table::find_range_end" ref="a36c21ad901a72be1c94391660cd696d1" args="(const_iterator left, bool(*comp)(const K &amp;, const K &amp;)) const " -->
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename K, typename T &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classRaul_1_1Table.html">Table</a>&lt; K, T &gt;::const_iterator <a class="el" href="classRaul_1_1Table.html">Raul::Table</a>&lt; K, T &gt;::find_range_end </td>
          <td>(</td>
          <td class="paramtype">const_iterator&nbsp;</td>
          <td class="paramname"> <em>start</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">bool(*)(const K &amp;, const K &amp;)&nbsp;</td>
          <td class="paramname"> <em>comp</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td> const</td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Find the end of a range using a custom comparator. </p>
<p>Two entries a, b are considered in the range if comp(a, b) returns true.</p>
<p>Returns an iterator exactly one entry past the end of the range (possibly end()).</p>
<p>WARNING: The restrictions on <em>comparator</em> are very strict: ALL items considered equal by <em>comparator</em> must be stored in the <a class="el" href="classRaul_1_1Table.html" title="Slow insertion, fast lookup, cache optimized, super fast sorted iteration.">Table</a> consecutively i.e. there are no 3 values a, b, c S.T. comp(a) &amp;&amp; ! comp(b) &amp;&amp; comp(c).</p>
<p>This is useful for very quickly finding all children of a <a class="el" href="classRaul_1_1Path.html" title="A URI which is a path (for example a filesystem or OSC path).">Path</a>, which obey the above rule with lexicographical order. </p>

</div>
</div>
<a class="anchor" id="ad54943efbc3ac317034e134e1c0aa14f"></a><!-- doxytag: member="Raul::Table::find_range_end" ref="ad54943efbc3ac317034e134e1c0aa14f" args="(iterator left, bool(*comp)(const K &amp;, const K &amp;))" -->
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename K, typename T &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classRaul_1_1Table.html">Table</a>&lt; K, T &gt;::iterator <a class="el" href="classRaul_1_1Table.html">Raul::Table</a>&lt; K, T &gt;::find_range_end </td>
          <td>(</td>
          <td class="paramtype">iterator&nbsp;</td>
          <td class="paramname"> <em>start</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">bool(*)(const K &amp;, const K &amp;)&nbsp;</td>
          <td class="paramname"> <em>comp</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Find the end of a range using a custom comparator. </p>
<p>Two entries a, b are considered in the range if comp(a, b) returns true.</p>
<p>Returns an iterator exactly one entry past the end of the range (possibly end()).</p>
<p>WARNING: The restrictions on <em>comparator</em> are very strict: ALL items considered equal by <em>comparator</em> must be stored in the <a class="el" href="classRaul_1_1Table.html" title="Slow insertion, fast lookup, cache optimized, super fast sorted iteration.">Table</a> consecutively i.e. there are no 3 values a, b, c S.T. comp(a) &amp;&amp; ! comp(b) &amp;&amp; comp(c).</p>
<p>This is useful for very quickly finding all children of a <a class="el" href="classRaul_1_1Path.html" title="A URI which is a path (for example a filesystem or OSC path).">Path</a>, which obey the above rule with lexicographical order. </p>

</div>
</div>
<a class="anchor" id="ac1a5714461807b88759f4e94cf538d22"></a><!-- doxytag: member="Raul::Table::operator[]" ref="ac1a5714461807b88759f4e94cf538d22" args="(const K &amp;key)" -->
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename K, typename T &gt; </div>
      <table class="memname">
        <tr>
          <td class="memname">T &amp; <a class="el" href="classRaul_1_1Table.html">Raul::Table</a>&lt; K, T &gt;::operator[] </td>
          <td>(</td>
          <td class="paramtype">const K &amp;&nbsp;</td>
          <td class="paramname"> <em>key</em></td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Insert an item, and return a reference to it's value. </p>
<p>This may be used to insert values with pretty syntax:</p>
<p>table["gorilla"] = "killa";</p>
<p>T must have a default constructor for this to be possible. </p>

<p>References <a class="el" href="classRaul_1_1Table.html#a9128fe7b2e9ef926e8de6dffb9962fa8">Raul::Table&lt; K, T &gt;::find()</a>, and <a class="el" href="classRaul_1_1Table.html#a31e420e7176789d39f88fc391e5144cd">Raul::Table&lt; K, T &gt;::insert()</a>.</p>

</div>
</div>
<hr/>The documentation for this class was generated from the following files:<ul>
<li><a class="el" href="Table_8hpp_source.html">Table.hpp</a></li>
<li><a class="el" href="TableImpl_8hpp_source.html">TableImpl.hpp</a></li>
</ul>
</div>
<hr class="footer"/><address class="footer"><small>Generated on Wed Oct 6 2010 for RAUL by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.1 </small></address>
</body>
</html>