<!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< K, T > 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 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 List</span></a></li> <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li> <li><a href="functions.html"><span>Class 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< K, T ></a> </li> </ul> </div> </div> <div class="header"> <div class="summary"> <a href="#pub-methods">Public Member Functions</a> | <a href="#friends">Friends</a> </div> <div class="headertitle"> <h1>Raul::Table< K, T > 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 <<a class="el" href="Table_8hpp_source.html">Table.hpp</a>></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)" --> </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 </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 </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 </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 </td><td class="memItemRight" valign="bottom"><b>size</b> () const </td></tr> <tr><td class="memItemLeft" align="right" valign="top">std::pair< iterator, bool > </td><td class="memItemRight" valign="bottom"><a class="el" href="classRaul_1_1Table.html#a31e420e7176789d39f88fc391e5144cd">insert</a> (const std::pair< K, T > &entry)</td></tr> <tr><td class="mdescLeft"> </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 &key)" --> void </td><td class="memItemRight" valign="bottom"><b>erase</b> (const K &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 </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 </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"> </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 </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"> </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< <a class="el" href="classRaul_1_1Table.html">Table</a>< K, T > > </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"> </td><td class="mdescRight">Erase and return a range of entries. <br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">std::pair< iterator, bool > </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>< K, T > &range)</td></tr> <tr><td class="mdescLeft"> </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 &key) const " --> const_iterator </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 &key) const </td></tr> <tr><td class="mdescLeft"> </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 &key) const " --> const_iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="classRaul_1_1Table.html#a67bca2f3ec346d5ebc417fe60dbd7768">find</a> (const K &key) const </td></tr> <tr><td class="mdescLeft"> </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 &key)" --> iterator </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 &key)</td></tr> <tr><td class="mdescLeft"> </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 &key)" --> iterator </td><td class="memItemRight" valign="bottom"><a class="el" href="classRaul_1_1Table.html#a61792cb9540eb1859da47a38f4baa3c2">find</a> (const K &key)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Binary search (O(log(n))). <br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">const_iterator </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 &, const K &)) const </td></tr> <tr><td class="mdescLeft"> </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 </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 &, const K &))</td></tr> <tr><td class="mdescLeft"> </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 & </td><td class="memItemRight" valign="bottom"><a class="el" href="classRaul_1_1Table.html#ac1a5714461807b88759f4e94cf538d22">operator[]</a> (const K &key)</td></tr> <tr><td class="mdescLeft"> </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 </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 </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 </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 </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 </td><td class="memItemRight" valign="bottom"><b>iterator</b></td></tr> </table> <hr/><a name="_details"></a><h2>Detailed Description</h2> <h3>template<typename K, typename T><br/> class Raul::Table< K, T ></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< K, T > &entry)" --> <div class="memitem"> <div class="memproto"> <div class="memtemplate"> template<typename K, typename T> </div> <table class="memname"> <tr> <td class="memname">std::pair< typename <a class="el" href="classRaul_1_1Table.html">Table</a>< K, T >::iterator, bool > <a class="el" href="classRaul_1_1Table.html">Raul::Table</a>< K, T >::insert </td> <td>(</td> <td class="paramtype">const std::pair< K, T > & </td> <td class="paramname"> <em>entry</em></td> <td> ) </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< K, T >::cram()</a>, and <a class="el" href="classRaul_1_1Table.html#ac1a5714461807b88759f4e94cf538d22">Raul::Table< K, T >::operator[]()</a>.</p> </div> </div> <a class="anchor" id="ac163ceab6c10c10b69016fede580c888"></a><!-- doxytag: member="Raul::Table::cram" ref="ac163ceab6c10c10b69016fede580c888" args="(const Table< K, T > &range)" --> <div class="memitem"> <div class="memproto"> <div class="memtemplate"> template<typename K, typename T> </div> <table class="memname"> <tr> <td class="memname">std::pair< typename <a class="el" href="classRaul_1_1Table.html">Table</a>< K, T >::iterator, bool > <a class="el" href="classRaul_1_1Table.html">Raul::Table</a>< K, T >::cram </td> <td>(</td> <td class="paramtype">const <a class="el" href="classRaul_1_1Table.html">Table</a>< K, T > & </td> <td class="paramname"> <em>range</em></td> <td> ) </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< K, T >::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 &, const K &)) const " --> <div class="memitem"> <div class="memproto"> <div class="memtemplate"> template<typename K, typename T > </div> <table class="memname"> <tr> <td class="memname"><a class="el" href="classRaul_1_1Table.html">Table</a>< K, T >::const_iterator <a class="el" href="classRaul_1_1Table.html">Raul::Table</a>< K, T >::find_range_end </td> <td>(</td> <td class="paramtype">const_iterator </td> <td class="paramname"> <em>start</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">bool(*)(const K &, const K &) </td> <td class="paramname"> <em>comp</em></td><td> </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) && ! comp(b) && 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 &, const K &))" --> <div class="memitem"> <div class="memproto"> <div class="memtemplate"> template<typename K, typename T > </div> <table class="memname"> <tr> <td class="memname"><a class="el" href="classRaul_1_1Table.html">Table</a>< K, T >::iterator <a class="el" href="classRaul_1_1Table.html">Raul::Table</a>< K, T >::find_range_end </td> <td>(</td> <td class="paramtype">iterator </td> <td class="paramname"> <em>start</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">bool(*)(const K &, const K &) </td> <td class="paramname"> <em>comp</em></td><td> </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) && ! comp(b) && 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 &key)" --> <div class="memitem"> <div class="memproto"> <div class="memtemplate"> template<typename K, typename T > </div> <table class="memname"> <tr> <td class="memname">T & <a class="el" href="classRaul_1_1Table.html">Raul::Table</a>< K, T >::operator[] </td> <td>(</td> <td class="paramtype">const K & </td> <td class="paramname"> <em>key</em></td> <td> ) </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< K, T >::find()</a>, and <a class="el" href="classRaul_1_1Table.html#a31e420e7176789d39f88fc391e5144cd">Raul::Table< K, T >::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 <a href="http://www.doxygen.org/index.html"> <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.1 </small></address> </body> </html>