Public Member Functions | Friends

Raul::Table< K, T > Class Template Reference
[Realtime Audio Utility Library]

Slow insertion, fast lookup, cache optimized, super fast sorted iteration. More...

#include <Table.hpp>

List of all members.

Public Member Functions

 Table (size_t capacity)
void clear ()
bool empty () const
void reserve (size_t n)
size_t size () const
std::pair< iterator, bool > insert (const std::pair< K, T > &entry)
 Add an item to the table, using entry.first as the search key.
void erase (const K &key)
void erase (iterator i)
void erase (iterator start, iterator end)
 Erase a range of elements from first to last, including first but not including last.
void erase_by_index (size_t start, size_t end)
 Erase a range of elements from first_index to last_index, including first_index but not including last_index.
SharedPtr< Table< K, T > > yank (iterator start, iterator end)
 Erase and return a range of entries.
std::pair< iterator, bool > cram (const Table< K, T > &range)
 Cram a range of entries back in.
const_iterator find (const_iterator start, const_iterator end, const K &key) const
 Binary search (O(log(end - start))).
const_iterator find (const K &key) const
 Binary search (O(log(n))).
iterator find (const_iterator start, const_iterator end, const K &key)
 Binary search (O(log(end - start))).
iterator find (const K &key)
 Binary search (O(log(n))).
const_iterator find_range_end (const_iterator left, bool(*comp)(const K &, const K &)) const
 Find the end of a range using a custom comparator.
iterator find_range_end (iterator left, bool(*comp)(const K &, const K &))
 Find the end of a range using a custom comparator.
T & operator[] (const K &key)
 Insert an item, and return a reference to it's value.
const_iterator begin () const
const_iterator end () const
iterator begin ()
iterator end ()

Friends

class iterator

Detailed Description

template<typename K, typename T>
class Raul::Table< K, T >

Slow insertion, fast lookup, cache optimized, super fast sorted iteration.

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.


Member Function Documentation

template<typename K, typename T>
std::pair< typename Table< K, T >::iterator, bool > Raul::Table< K, T >::insert ( const std::pair< K, T > &  entry  ) 

Add an item to the table, using entry.first as the search key.

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)

Referenced by Raul::Table< K, T >::cram(), and Raul::Table< K, T >::operator[]().

template<typename K, typename T>
std::pair< typename Table< K, T >::iterator, bool > Raul::Table< K, T >::cram ( const Table< K, T > &  range  ) 

Cram a range of entries back in.

Range MUST follow the same ordering guidelines as find_range_end. Return type is the same as insert, iterator points to first inserted entry

References Raul::Table< K, T >::insert().

template<typename K, typename T >
Table< K, T >::const_iterator Raul::Table< K, T >::find_range_end ( const_iterator  start,
bool(*)(const K &, const K &)  comp 
) const

Find the end of a range using a custom comparator.

Two entries a, b are considered in the range if comp(a, b) returns true.

Returns an iterator exactly one entry past the end of the range (possibly end()).

WARNING: The restrictions on comparator are very strict: ALL items considered equal by comparator must be stored in the Table consecutively i.e. there are no 3 values a, b, c S.T. comp(a) && ! comp(b) && comp(c).

This is useful for very quickly finding all children of a Path, which obey the above rule with lexicographical order.

template<typename K, typename T >
Table< K, T >::iterator Raul::Table< K, T >::find_range_end ( iterator  start,
bool(*)(const K &, const K &)  comp 
)

Find the end of a range using a custom comparator.

Two entries a, b are considered in the range if comp(a, b) returns true.

Returns an iterator exactly one entry past the end of the range (possibly end()).

WARNING: The restrictions on comparator are very strict: ALL items considered equal by comparator must be stored in the Table consecutively i.e. there are no 3 values a, b, c S.T. comp(a) && ! comp(b) && comp(c).

This is useful for very quickly finding all children of a Path, which obey the above rule with lexicographical order.

template<typename K, typename T >
T & Raul::Table< K, T >::operator[] ( const K &  key  ) 

Insert an item, and return a reference to it's value.

This may be used to insert values with pretty syntax:

table["gorilla"] = "killa";

T must have a default constructor for this to be possible.

References Raul::Table< K, T >::find(), and Raul::Table< K, T >::insert().


The documentation for this class was generated from the following files: