stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates > Class Template Reference

Basic class implementing a base B+ tree data structure in memory. More...

#include <btree.h>

List of all members.

Public Types

typedef _Key key_type
 First template parameter: The key type of the B+ tree.
typedef _Data data_type
 Second template parameter: The data type associated with each key.
typedef _Value value_type
 Third template parameter: Composition pair of key and data types, this is required by the STL standard.
typedef _Compare key_compare
 Fourth template parameter: Key comparison function object.
typedef _Traits traits
 Fifth template parameter: Traits object used to define more parameters of the B+ tree.
typedef btree< key_type,
data_type, value_type,
key_compare, traits,
allow_duplicates
btree_self
 Typedef of our own type.
typedef size_t size_type
 Size type used to count keys.
typedef std::pair< key_type,
data_type
pair_type
 The pair of key_type and data_type, this may be different from value_type.

Public Member Functions

 btree ()
 Default constructor initializing an empty B+ tree with the standard key comparison function.
 btree (const key_compare &kcf)
 Constructor initializing an empty B+ tree with a special key comparison object.
template<class InputIterator>
 btree (InputIterator first, InputIterator last)
 Constructor initializing a B+ tree with the range [first,last).
template<class InputIterator>
 btree (InputIterator first, InputIterator last, const key_compare &kcf)
 Constructor initializing a B+ tree with the range [first,last) and a special key comparison object.
 ~btree ()
 Frees up all used B+ tree memory pages.
void swap (btree_self &from)
 Fast swapping of two identical B+ tree objects.
key_compare key_comp () const
 Constant access to the key comparison object sorting the B+ tree.
value_compare value_comp () const
 Constant access to a constructed value_type comparison object.
void clear ()
 Frees all key/data pairs and all nodes of the tree.
iterator begin ()
 Constructs a read/data-write iterator that points to the first slot in the first leaf of the B+ tree.
iterator end ()
 Constructs a read/data-write iterator that points to the first invalid slot in the last leaf of the B+ tree.
const_iterator begin () const
 Constructs a read-only constant iterator that points to the first slot in the first leaf of the B+ tree.
const_iterator end () const
 Constructs a read-only constant iterator that points to the first invalid slot in the last leaf of the B+ tree.
reverse_iterator rbegin ()
 Constructs a read/data-write reverse iterator that points to the first invalid slot in the last leaf of the B+ tree.
reverse_iterator rend ()
 Constructs a read/data-write reverse iterator that points to the first slot in the first leaf of the B+ tree.
const_reverse_iterator rbegin () const
 Constructs a read-only reverse iterator that points to the first invalid slot in the last leaf of the B+ tree.
const_reverse_iterator rend () const
 Constructs a read-only reverse iterator that points to the first slot in the first leaf of the B+ tree.
size_type size () const
 Return the number of key/data pairs in the B+ tree.
bool empty () const
 Returns true if there is at least one key/data pair in the B+ tree.
size_type max_size () const
 Returns the largest possible size of the B+ Tree.
struct tree_statsget_stats () const
 Return a const reference to the current statistics.
bool exists (const key_type &key) const
 Non-STL function checking whether a key is in the B+ tree.
iterator find (const key_type &key)
 Tries to locate a key in the B+ tree and returns an iterator to the key/data slot if found.
const_iterator find (const key_type &key) const
 Tries to locate a key in the B+ tree and returns an constant iterator to the key/data slot if found.
size_type count (const key_type &key) const
 Tries to locate a key in the B+ tree and returns the number of identical key entries found.
iterator lower_bound (const key_type &key)
 Searches the B+ tree and returns an iterator to the first key less or equal to the parameter.
const_iterator lower_bound (const key_type &key) const
 Searches the B+ tree and returns an constant iterator to the first key less or equal to the parameter.
iterator upper_bound (const key_type &key)
 Searches the B+ tree and returns an iterator to the first key greater than the parameter.
const_iterator upper_bound (const key_type &key) const
 Searches the B+ tree and returns an constant iterator to the first key greater than the parameter.
std::pair< iterator, iteratorequal_range (const key_type &key)
 Searches the B+ tree and returns both lower_bound() and upper_bound().
std::pair< const_iterator,
const_iterator
equal_range (const key_type &key) const
 Searches the B+ tree and returns both lower_bound() and upper_bound().
bool operator== (const btree_self &other) const
 Equality relation of B+ trees of the same type.
bool operator!= (const btree_self &other) const
 Inequality relation. Based on operator==.
bool operator< (const btree_self &other) const
 Total ordering relation of B+ trees of the same type.
bool operator> (const btree_self &other) const
 Greater relation. Based on operator<.
bool operator<= (const btree_self &other) const
 Less-equal relation. Based on operator<.
bool operator>= (const btree_self &other) const
 Greater-equal relation. Based on operator<.
btree_selfoperator= (const btree_self &other)
 *** Fast Copy: Assign Operator and Copy Constructors
 btree (const btree_self &other)
 Copy constructor.
std::pair< iterator, bool > insert (const pair_type &x)
 Attempt to insert a key/data pair into the B+ tree.
std::pair< iterator, bool > insert (const key_type &key, const data_type &data)
 Attempt to insert a key/data pair into the B+ tree.
std::pair< iterator, bool > insert2 (const key_type &key, const data_type &data)
 Attempt to insert a key/data pair into the B+ tree.
iterator insert (iterator, const pair_type &x)
 Attempt to insert a key/data pair into the B+ tree.
iterator insert2 (iterator, const key_type &key, const data_type &data)
 Attempt to insert a key/data pair into the B+ tree.
template<typename InputIterator>
void insert (InputIterator first, InputIterator last)
 Attempt to insert the range [first,last) of value_type pairs into the B+ tree.
bool erase_one (const key_type &key)
 Erases one (the first) of the key/data pairs associated with the given key.
size_type erase (const key_type &key)
 Erases all the key/data pairs associated with the given key.
void erase (iterator iter)
 Erase the key/data pair referenced by the iterator.
void erase (iterator, iterator)
 Erase all key/data pairs in the range [first,last).
void print (std::ostream &os) const
 Print out the B+ tree structure with keys onto the given ostream.
void print_leaves (std::ostream &os) const
 Print out only the leaves via the double linked list.
void verify () const
 Run a thorough verification of all B+ tree invariants.
void dump (std::ostream &os) const
 Dump the contents of the B+ tree out onto an ostream as a binary image.
bool restore (std::istream &is)
 Restore a binary image of a dumped B+ tree from an istream.

Static Public Attributes

static const bool allow_duplicates = _Duplicates
 Sixth template parameter: Allow duplicate keys in the B+ tree.
static const unsigned short leafslotmax = traits::leafslots
 Base B+ tree parameter: The number of key/data slots in each leaf.
static const unsigned short innerslotmax = traits::innerslots
 Base B+ tree parameter: The number of key slots in each inner node, this can differ from slots in each leaf.
static const unsigned short minleafslots = (leafslotmax / 2)
 Computed B+ tree parameter: The minimum number of key/data slots used in a leaf.
static const unsigned short mininnerslots = (innerslotmax / 2)
 Computed B+ tree parameter: The minimum number of key slots used in an inner node.
static const bool selfverify = traits::selfverify
 Debug parameter: Enables expensive and thorough checking of the B+ tree invariants after each insert/erase operation.
static const bool debug = traits::debug
 Debug parameter: Prints out lots of debug information about how the algorithms change the tree.

Private Types

enum  result_flags_t { btree_ok = 0, btree_not_found = 1, btree_update_lastkey = 2, btree_fixmerge = 4 }
 Result flags of recursive deletion. More...
typedef btree_pair_to_value
< value_type, pair_type
pair_to_value_type
 Using template specialization select the correct converter used by the iterators.

Private Member Functions

bool key_lessequal (const key_type &a, const key_type b) const
 True if a <= b ? constructed from key_less().
bool key_greater (const key_type &a, const key_type &b) const
 True if a > b ? constructed from key_less().
bool key_greaterequal (const key_type &a, const key_type b) const
 True if a >= b ? constructed from key_less().
bool key_equal (const key_type &a, const key_type &b) const
 True if a == b ? constructed from key_less().
leaf_nodeallocate_leaf ()
 Allocate and initialize a leaf node.
inner_nodeallocate_inner (unsigned short l)
 Allocate and initialize an inner node.
void free_node (node *n)
 Correctly free either inner or leaf node, destructs all contained key and value objects.
void clear_recursive (node *n)
 Recursively free up nodes.
template<typename node_type>
int find_lower (const node_type *n, const key_type &key) const
 Searches for the first key in the node n less or equal to key.
template<typename node_type>
int find_upper (const node_type *n, const key_type &key) const
 Searches for the first key in the node n greater than key.
struct nodecopy_recursive (const node *n)
 Recursively copy nodes from another B+ tree object.
std::pair< iterator, bool > insert_start (const key_type &key, const data_type &value)
 Start the insertion descent at the current root and handle root splits.
std::pair< iterator, bool > insert_descend (node *n, const key_type &key, const data_type &value, key_type *splitkey, node **splitnode)
 Insert an item into the B+ tree.
void split_leaf_node (leaf_node *leaf, key_type *_newkey, node **_newleaf)
 Split up a leaf node into two equally-filled sibling leaves.
void split_inner_node (inner_node *inner, key_type *_newkey, node **_newinner, unsigned int addslot)
 Split up an inner node into two equally-filled sibling nodes.
result_t erase_one_descend (const key_type &key, node *curr, node *left, node *right, inner_node *leftparent, inner_node *rightparent, inner_node *parent, unsigned int parentslot)
 Erase one (the first) key/data pair in the B+ tree matching key.
result_t merge_leaves (leaf_node *left, leaf_node *right, inner_node *parent)
 Merge two leaf nodes.
void verify_node (const node *n, key_type *minkey, key_type *maxkey, tree_stats &vstats) const
 Recursively descend down the tree and verify each node.
void verify_leaflinks () const
 Verify the double linked list of leaves.
void dump_node (std::ostream &os, const node *n) const
 Recursively descend down the tree and dump each node in a precise order.
noderestore_node (std::istream &is)
 Read the dump image and construct a tree from the node order in the serialization.

Static Private Member Functions

static result_t merge_inner (inner_node *left, inner_node *right, inner_node *parent, unsigned int parentslot)
 Merge two inner nodes.
static result_t shift_left_leaf (leaf_node *left, leaf_node *right, inner_node *parent, unsigned int parentslot)
 Balance two leaf nodes.
static void shift_left_inner (inner_node *left, inner_node *right, inner_node *parent, unsigned int parentslot)
 Balance two inner nodes.
static void shift_right_leaf (leaf_node *left, leaf_node *right, inner_node *parent, unsigned int parentslot)
 Balance two leaf nodes.
static void shift_right_inner (inner_node *left, inner_node *right, inner_node *parent, unsigned int parentslot)
 Balance two inner nodes.
static void print_node (std::ostream &os, const node *node, unsigned int depth=0, bool recursive=false)
 Recursively descend down the tree and print out nodes.

Private Attributes

noderoot
 Pointer to the B+ tree's root node, either leaf or inner node.
leaf_nodeheadleaf
 Pointer to first leaf in the double linked leaf chain.
leaf_nodetailleaf
 Pointer to last leaf in the double linked leaf chain.
tree_stats stats
 Other small statistics about the B+ tree.
key_compare key_less
 Key comparison object.

Classes

struct  btree_pair_to_value
struct  btree_pair_to_value< value_type, value_type >
class  const_iterator
 STL-like read-only iterator object for B+ tree items. More...
class  const_reverse_iterator
 STL-like read-only reverse iterator object for B+ tree items. More...
struct  dump_header
struct  inner_node
 Extended structure of a inner node in-memory. More...
class  iterator
 STL-like iterator object for B+ tree items. More...
struct  leaf_node
 Extended structure of a leaf node in memory. More...
struct  node
 The header structure of each node in-memory. More...
struct  result_t
class  reverse_iterator
 STL-like mutable reverse iterator object for B+ tree items. More...
struct  tree_stats
 A small struct containing basic statistics about the B+ tree. More...
class  value_compare
 Function class to compare value_type objects. Required by the STL. More...


Detailed Description

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
class stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >

Basic class implementing a base B+ tree data structure in memory.

The base implementation of a memory B+ tree. It is based on the implementation in Cormen's Introduction into Algorithms, Jan Jannink's paper and other algorithm resources. Almost all STL-required function calls are implemented. The asymptotic time requirements of the STL are not always fulfilled in theory, however in practice this B+ tree performs better than a red-black tree by using more memory. The insertion function splits the nodes on the recursion unroll. Erase is largely based on Jannink's ideas.

This class is specialized into btree_set, btree_multiset, btree_map and btree_multimap using default template parameters and facade functions.

Definition at line 137 of file btree.h.


Member Typedef Documentation

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
typedef _Key stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::key_type

First template parameter: The key type of the B+ tree.

This is stored in inner nodes and leaves

Definition at line 144 of file btree.h.

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
typedef _Data stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::data_type

Second template parameter: The data type associated with each key.

Stored in the B+ tree's leaves

Definition at line 148 of file btree.h.

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
typedef _Value stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::value_type

Third template parameter: Composition pair of key and data types, this is required by the STL standard.

The B+ tree does not store key and data together. If value_type == key_type then the B+ tree implements a set.

Definition at line 154 of file btree.h.

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
typedef _Compare stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::key_compare

Fourth template parameter: Key comparison function object.

Definition at line 157 of file btree.h.

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
typedef _Traits stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::traits

Fifth template parameter: Traits object used to define more parameters of the B+ tree.

Definition at line 161 of file btree.h.

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
typedef btree<key_type, data_type, value_type, key_compare, traits, allow_duplicates> stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::btree_self

Typedef of our own type.

Definition at line 177 of file btree.h.

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
typedef size_t stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::size_type

Size type used to count keys.

Definition at line 180 of file btree.h.

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
typedef std::pair<key_type, data_type> stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::pair_type

The pair of key_type and data_type, this may be different from value_type.

Definition at line 183 of file btree.h.

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
typedef btree_pair_to_value<value_type, pair_type> stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::pair_to_value_type [private]

Using template specialization select the correct converter used by the iterators.

Definition at line 354 of file btree.h.


Member Enumeration Documentation

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
enum stx::btree::result_flags_t [private]

Result flags of recursive deletion.

Enumerator:
btree_ok  Deletion successful and no fix-ups necessary.
btree_not_found  Deletion not successful because key was not found.
btree_update_lastkey  Deletion successful, the last key was updated so parent slotkeys need updates.

btree_fixmerge  Deletion successful, children nodes were merged and the parent needs to remove the empty node.

Definition at line 2273 of file btree.h.


Constructor & Destructor Documentation

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::btree (  )  [inline]

Default constructor initializing an empty B+ tree with the standard key comparison function.

Definition at line 1244 of file btree.h.

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::btree ( const key_compare kcf  )  [inline]

Constructor initializing an empty B+ tree with a special key comparison object.

Definition at line 1251 of file btree.h.

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
template<class InputIterator>
stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::btree ( InputIterator  first,
InputIterator  last 
) [inline]

Constructor initializing a B+ tree with the range [first,last).

Definition at line 1259 of file btree.h.

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
template<class InputIterator>
stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::btree ( InputIterator  first,
InputIterator  last,
const key_compare kcf 
) [inline]

Constructor initializing a B+ tree with the range [first,last) and a special key comparison object.

Definition at line 1268 of file btree.h.

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::~btree (  )  [inline]

Frees up all used B+ tree memory pages.

Definition at line 1276 of file btree.h.

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::btree ( const btree_self other  )  [inline]

Copy constructor.

The newly initialized B+ tree object will contain a copy of all key/data pairs.

Definition at line 1888 of file btree.h.


Member Function Documentation

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
void stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::swap ( btree_self from  )  [inline]

Fast swapping of two identical B+ tree objects.

Definition at line 1282 of file btree.h.

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
key_compare stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::key_comp (  )  const [inline]

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
value_compare stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::value_comp (  )  const [inline]

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
bool stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::key_lessequal ( const key_type a,
const key_type  b 
) const [inline, private]

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
bool stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::key_greater ( const key_type a,
const key_type b 
) const [inline, private]

True if a > b ? constructed from key_less().

Definition at line 1340 of file btree.h.

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
bool stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::key_greaterequal ( const key_type a,
const key_type  b 
) const [inline, private]

True if a >= b ? constructed from key_less().

Definition at line 1346 of file btree.h.

Referenced by stx::btree< _Key, _Data, std::pair< key_type, data_type >, _Compare, _Traits, true >::verify_node().

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
bool stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::key_equal ( const key_type a,
const key_type b 
) const [inline, private]

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
leaf_node* stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::allocate_leaf (  )  [inline, private]

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
inner_node* stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::allocate_inner ( unsigned short  l  )  [inline, private]

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
void stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::free_node ( node n  )  [inline, private]

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
void stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::clear (  )  [inline]

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
void stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::clear_recursive ( node n  )  [inline, private]

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
iterator stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::begin (  )  [inline]

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
iterator stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::end (  )  [inline]

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
const_iterator stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::begin (  )  const [inline]

Constructs a read-only constant iterator that points to the first slot in the first leaf of the B+ tree.

Definition at line 1457 of file btree.h.

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
const_iterator stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::end (  )  const [inline]

Constructs a read-only constant iterator that points to the first invalid slot in the last leaf of the B+ tree.

Definition at line 1464 of file btree.h.

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
reverse_iterator stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::rbegin (  )  [inline]

Constructs a read/data-write reverse iterator that points to the first invalid slot in the last leaf of the B+ tree.

Uses STL magic.

Definition at line 1471 of file btree.h.

Referenced by stx::btree_set< _Key, _Compare, _Traits >::rbegin(), stx::btree_multiset< _Key, _Compare, _Traits >::rbegin(), stx::btree_multimap< _Key, _Data, _Compare, _Traits >::rbegin(), and stx::btree_map< _Key, _Data, _Compare, _Traits >::rbegin().

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
reverse_iterator stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::rend (  )  [inline]

Constructs a read/data-write reverse iterator that points to the first slot in the first leaf of the B+ tree.

Uses STL magic.

Definition at line 1478 of file btree.h.

Referenced by stx::btree_set< _Key, _Compare, _Traits >::rend(), stx::btree_multiset< _Key, _Compare, _Traits >::rend(), stx::btree_multimap< _Key, _Data, _Compare, _Traits >::rend(), and stx::btree_map< _Key, _Data, _Compare, _Traits >::rend().

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
const_reverse_iterator stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::rbegin (  )  const [inline]

Constructs a read-only reverse iterator that points to the first invalid slot in the last leaf of the B+ tree.

Uses STL magic.

Definition at line 1485 of file btree.h.

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
const_reverse_iterator stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::rend (  )  const [inline]

Constructs a read-only reverse iterator that points to the first slot in the first leaf of the B+ tree.

Uses STL magic.

Definition at line 1492 of file btree.h.

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
template<typename node_type>
int stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::find_lower ( const node_type *  n,
const key_type key 
) const [inline, private]

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
template<typename node_type>
int stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::find_upper ( const node_type *  n,
const key_type key 
) const [inline, private]

Searches for the first key in the node n greater than key.

Uses binary search with an optional linear self-verification. This is a template function, because the slotkey array is located at different places in leaf_node and inner_node.

Definition at line 1552 of file btree.h.

Referenced by stx::btree< _Key, _Data, std::pair< key_type, data_type >, _Compare, _Traits, true >::upper_bound().

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
size_type stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::size (  )  const [inline]

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
bool stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::empty (  )  const [inline]

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
size_type stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::max_size (  )  const [inline]

Returns the largest possible size of the B+ Tree.

This is just a function required by the STL standard, the B+ Tree can hold more items.

Definition at line 1611 of file btree.h.

Referenced by stx::btree_set< _Key, _Compare, _Traits >::max_size(), stx::btree_multiset< _Key, _Compare, _Traits >::max_size(), stx::btree_multimap< _Key, _Data, _Compare, _Traits >::max_size(), and stx::btree_map< _Key, _Data, _Compare, _Traits >::max_size().

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
struct tree_stats& stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::get_stats (  )  const [inline, read]

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
bool stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::exists ( const key_type key  )  const [inline]

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
iterator stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::find ( const key_type key  )  [inline]

Tries to locate a key in the B+ tree and returns an iterator to the key/data slot if found.

If unsuccessful it returns end().

Definition at line 1648 of file btree.h.

Referenced by stx::btree_set< _Key, _Compare, _Traits >::find(), stx::btree_multiset< _Key, _Compare, _Traits >::find(), stx::btree_multimap< _Key, _Data, _Compare, _Traits >::find(), and stx::btree_map< _Key, _Data, _Compare, _Traits >::find().

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
const_iterator stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::find ( const key_type key  )  const [inline]

Tries to locate a key in the B+ tree and returns an constant iterator to the key/data slot if found.

If unsuccessful it returns end().

Definition at line 1670 of file btree.h.

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
size_type stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::count ( const key_type key  )  const [inline]

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
iterator stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::lower_bound ( const key_type key  )  [inline]

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
const_iterator stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::lower_bound ( const key_type key  )  const [inline]

Searches the B+ tree and returns an constant iterator to the first key less or equal to the parameter.

If unsuccessful it returns end().

Definition at line 1746 of file btree.h.

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
iterator stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::upper_bound ( const key_type key  )  [inline]

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
const_iterator stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::upper_bound ( const key_type key  )  const [inline]

Searches the B+ tree and returns an constant iterator to the first key greater than the parameter.

If unsuccessful it returns end().

Definition at line 1788 of file btree.h.

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
std::pair<iterator, iterator> stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::equal_range ( const key_type key  )  [inline]

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
std::pair<const_iterator, const_iterator> stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::equal_range ( const key_type key  )  const [inline]

Searches the B+ tree and returns both lower_bound() and upper_bound().

Definition at line 1814 of file btree.h.

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
bool stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::operator== ( const btree_self other  )  const [inline]

Equality relation of B+ trees of the same type.

B+ trees of the same size and equal elements (both key and data) are considered equal. Beware of the random ordering of duplicate keys.

Definition at line 1825 of file btree.h.

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
bool stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::operator!= ( const btree_self other  )  const [inline]

Inequality relation. Based on operator==.

Definition at line 1831 of file btree.h.

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
bool stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::operator< ( const btree_self other  )  const [inline]

Total ordering relation of B+ trees of the same type.

It uses std::lexicographical_compare() for the actual comparison of elements.

Definition at line 1838 of file btree.h.

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
bool stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::operator> ( const btree_self other  )  const [inline]

Greater relation. Based on operator<.

Definition at line 1844 of file btree.h.

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
bool stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::operator<= ( const btree_self other  )  const [inline]

Less-equal relation. Based on operator<.

Definition at line 1850 of file btree.h.

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
bool stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::operator>= ( const btree_self other  )  const [inline]

Greater-equal relation. Based on operator<.

Definition at line 1856 of file btree.h.

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
btree_self& stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::operator= ( const btree_self other  )  [inline]

*** Fast Copy: Assign Operator and Copy Constructors

Assignment operator. All the key/data pairs are copied

Definition at line 1865 of file btree.h.

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
struct node* stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::copy_recursive ( const node n  )  [inline, read, private]

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
std::pair<iterator, bool> stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::insert ( const pair_type x  )  [inline]

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
std::pair<iterator, bool> stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::insert ( const key_type key,
const data_type data 
) [inline]

Attempt to insert a key/data pair into the B+ tree.

Beware that if key_type == data_type, then the template iterator insert() is called instead. If the tree does not allow duplicate keys, then the insert may fail if it is already present.

Definition at line 1962 of file btree.h.

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
std::pair<iterator, bool> stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::insert2 ( const key_type key,
const data_type data 
) [inline]

Attempt to insert a key/data pair into the B+ tree.

This function is the same as the other insert, however if key_type == data_type then the non-template function cannot be called. If the tree does not allow duplicate keys, then the insert may fail if it is already present.

Definition at line 1971 of file btree.h.

Referenced by stx::btree_set< _Key, _Compare, _Traits >::insert(), stx::btree_multiset< _Key, _Compare, _Traits >::insert(), stx::btree_multimap< _Key, _Data, _Compare, _Traits >::insert(), stx::btree_map< _Key, _Data, _Compare, _Traits >::insert(), stx::btree_multimap< _Key, _Data, _Compare, _Traits >::insert2(), and stx::btree_map< _Key, _Data, _Compare, _Traits >::insert2().

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
iterator stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::insert ( iterator  ,
const pair_type x 
) [inline]

Attempt to insert a key/data pair into the B+ tree.

The iterator hint is currently ignored by the B+ tree insertion routine.

Definition at line 1978 of file btree.h.

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
iterator stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::insert2 ( iterator  ,
const key_type key,
const data_type data 
) [inline]

Attempt to insert a key/data pair into the B+ tree.

The iterator hint is currently ignored by the B+ tree insertion routine.

Definition at line 1985 of file btree.h.

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
template<typename InputIterator>
void stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::insert ( InputIterator  first,
InputIterator  last 
) [inline]

Attempt to insert the range [first,last) of value_type pairs into the B+ tree.

Each key/data pair is inserted individually.

Definition at line 1993 of file btree.h.

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
std::pair<iterator, bool> stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::insert_start ( const key_type key,
const data_type value 
) [inline, private]

Start the insertion descent at the current root and handle root splits.

Returns true if the item was inserted

Definition at line 2008 of file btree.h.

Referenced by stx::btree< _Key, _Data, std::pair< key_type, data_type >, _Compare, _Traits, true >::insert(), and stx::btree< _Key, _Data, std::pair< key_type, data_type >, _Compare, _Traits, true >::insert2().

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
std::pair<iterator, bool> stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::insert_descend ( node n,
const key_type key,
const data_type value,
key_type splitkey,
node **  splitnode 
) [inline, private]

Insert an item into the B+ tree.

Descend down the nodes to a leaf, insert the key/data pair in a free slot. If the node overflows, then it must be split and the new split node inserted into the parent. Unroll / this splitting up to the root.

Definition at line 2054 of file btree.h.

Referenced by stx::btree< _Key, _Data, std::pair< key_type, data_type >, _Compare, _Traits, true >::insert_descend(), and stx::btree< _Key, _Data, std::pair< key_type, data_type >, _Compare, _Traits, true >::insert_start().

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
void stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::split_leaf_node ( leaf_node leaf,
key_type _newkey,
node **  _newleaf 
) [inline, private]

Split up a leaf node into two equally-filled sibling leaves.

Returns the new nodes and it's insertion key in the two parameters.

Definition at line 2194 of file btree.h.

Referenced by stx::btree< _Key, _Data, std::pair< key_type, data_type >, _Compare, _Traits, true >::insert_descend().

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
void stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::split_inner_node ( inner_node inner,
key_type _newkey,
node **  _newinner,
unsigned int  addslot 
) [inline, private]

Split up an inner node into two equally-filled sibling nodes.

Returns the new nodes and it's insertion key in the two parameters. Requires the slot of the item will be inserted, so the nodes will be the same size after the insert.

Definition at line 2234 of file btree.h.

Referenced by stx::btree< _Key, _Data, std::pair< key_type, data_type >, _Compare, _Traits, true >::insert_descend().

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
bool stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::erase_one ( const key_type key  )  [inline]

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
size_type stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::erase ( const key_type key  )  [inline]

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
void stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::erase ( iterator  iter  )  [inline]

Erase the key/data pair referenced by the iterator.

Definition at line 2373 of file btree.h.

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
void stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::erase ( iterator  ,
iterator   
) [inline]

Erase all key/data pairs in the range [first,last).

This function is currently not implemented by the B+ Tree.

Definition at line 2382 of file btree.h.

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
result_t stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::erase_one_descend ( const key_type key,
node curr,
node left,
node right,
inner_node leftparent,
inner_node rightparent,
inner_node parent,
unsigned int  parentslot 
) [inline, private]

Erase one (the first) key/data pair in the B+ tree matching key.

Descends down the tree in search of key. During the descent the parent, left and right siblings and their parents are computed and passed down. Once the key/data pair is found, it is removed from the leaf. If the leaf underflows 6 different cases are handled. These cases resolve the underflow by shifting key/data pairs from adjacent sibling nodes, merging two sibling nodes or trimming the tree.

Definition at line 2400 of file btree.h.

Referenced by stx::btree< _Key, _Data, std::pair< key_type, data_type >, _Compare, _Traits, true >::erase_one(), and stx::btree< _Key, _Data, std::pair< key_type, data_type >, _Compare, _Traits, true >::erase_one_descend().

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
result_t stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::merge_leaves ( leaf_node left,
leaf_node right,
inner_node parent 
) [inline, private]

Merge two leaf nodes.

The function moves all key/data pairs from right to left and sets right's slotuse to zero. The right slot is then removed by the calling parent node.

Definition at line 2677 of file btree.h.

Referenced by stx::btree< _Key, _Data, std::pair< key_type, data_type >, _Compare, _Traits, true >::erase_one_descend().

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
static result_t stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::merge_inner ( inner_node left,
inner_node right,
inner_node parent,
unsigned int  parentslot 
) [inline, static, private]

Merge two inner nodes.

The function moves all key/childid pairs from right to left and sets right's slotuse to zero. The right slot is then removed by the calling parent node.

Definition at line 2708 of file btree.h.

Referenced by stx::btree< _Key, _Data, std::pair< key_type, data_type >, _Compare, _Traits, true >::erase_one_descend().

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
static result_t stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::shift_left_leaf ( leaf_node left,
leaf_node right,
inner_node parent,
unsigned int  parentslot 
) [inline, static, private]

Balance two leaf nodes.

The function moves key/data pairs from right to left so that both nodes are equally filled. The parent node is updated if possible.

Definition at line 2755 of file btree.h.

Referenced by stx::btree< _Key, _Data, std::pair< key_type, data_type >, _Compare, _Traits, true >::erase_one_descend().

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
static void stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::shift_left_inner ( inner_node left,
inner_node right,
inner_node parent,
unsigned int  parentslot 
) [inline, static, private]

Balance two inner nodes.

The function moves key/data pairs from right to left so that both nodes are equally filled. The parent node is updated if possible.

Definition at line 2802 of file btree.h.

Referenced by stx::btree< _Key, _Data, std::pair< key_type, data_type >, _Compare, _Traits, true >::erase_one_descend().

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
static void stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::shift_right_leaf ( leaf_node left,
leaf_node right,
inner_node parent,
unsigned int  parentslot 
) [inline, static, private]

Balance two leaf nodes.

The function moves key/data pairs from left to right so that both nodes are equally filled. The parent node is updated if possible.

Definition at line 2862 of file btree.h.

Referenced by stx::btree< _Key, _Data, std::pair< key_type, data_type >, _Compare, _Traits, true >::erase_one_descend().

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
static void stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::shift_right_inner ( inner_node left,
inner_node right,
inner_node parent,
unsigned int  parentslot 
) [inline, static, private]

Balance two inner nodes.

The function moves key/data pairs from left to right so that both nodes are equally filled. The parent node is updated if possible.

Definition at line 2916 of file btree.h.

Referenced by stx::btree< _Key, _Data, std::pair< key_type, data_type >, _Compare, _Traits, true >::erase_one_descend().

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
void stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::print ( std::ostream &  os  )  const [inline]

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
void stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::print_leaves ( std::ostream &  os  )  const [inline]

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
static void stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::print_node ( std::ostream &  os,
const node node,
unsigned int  depth = 0,
bool  recursive = false 
) [inline, static, private]

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
void stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::verify (  )  const [inline]

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
void stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::verify_node ( const node n,
key_type minkey,
key_type maxkey,
tree_stats vstats 
) const [inline, private]

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
void stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::verify_leaflinks (  )  const [inline, private]

Verify the double linked list of leaves.

Definition at line 3158 of file btree.h.

Referenced by stx::btree< _Key, _Data, std::pair< key_type, data_type >, _Compare, _Traits, true >::verify().

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
void stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::dump ( std::ostream &  os  )  const [inline]

Dump the contents of the B+ tree out onto an ostream as a binary image.

The image contains memory pointers which will be fixed when the image is restored. For this to work your key_type and data_type must be integral types and contain no pointers or references.

Definition at line 3270 of file btree.h.

Referenced by stx::btree_set< _Key, _Compare, _Traits >::dump(), stx::btree_multiset< _Key, _Compare, _Traits >::dump(), stx::btree_multimap< _Key, _Data, _Compare, _Traits >::dump(), and stx::btree_map< _Key, _Data, _Compare, _Traits >::dump().

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
bool stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::restore ( std::istream &  is  )  [inline]

Restore a binary image of a dumped B+ tree from an istream.

The B+ tree pointers are fixed using the dump order. For dump and restore to work your key_type and data_type must be integral types and contain no pointers or references. Returns true if the restore was successful.

Definition at line 3287 of file btree.h.

Referenced by stx::btree_set< _Key, _Compare, _Traits >::restore(), stx::btree_multiset< _Key, _Compare, _Traits >::restore(), stx::btree_multimap< _Key, _Data, _Compare, _Traits >::restore(), and stx::btree_map< _Key, _Data, _Compare, _Traits >::restore().

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
void stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::dump_node ( std::ostream &  os,
const node n 
) const [inline, private]

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
node* stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::restore_node ( std::istream &  is  )  [inline, private]


Member Data Documentation

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
const bool stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::allow_duplicates = _Duplicates [static]

Sixth template parameter: Allow duplicate keys in the B+ tree.

Used to implement multiset and multimap.

Definition at line 165 of file btree.h.

Referenced by stx::btree< _Key, _Data, std::pair< key_type, data_type >, _Compare, _Traits, true >::erase(), and stx::btree< _Key, _Data, std::pair< key_type, data_type >, _Compare, _Traits, true >::insert_descend().

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
const unsigned short stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::leafslotmax = traits::leafslots [static]

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
const unsigned short stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::innerslotmax = traits::innerslots [static]

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
const unsigned short stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::minleafslots = (leafslotmax / 2) [static]

Computed B+ tree parameter: The minimum number of key/data slots used in a leaf.

If fewer slots are used, the leaf will be merged or slots shifted from it's siblings.

Definition at line 198 of file btree.h.

Referenced by stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::leaf_node::isfew(), and stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::leaf_node::isunderflow().

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
const unsigned short stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::mininnerslots = (innerslotmax / 2) [static]

Computed B+ tree parameter: The minimum number of key slots used in an inner node.

If fewer slots are used, the inner node will be merged or slots shifted from it's siblings.

Definition at line 203 of file btree.h.

Referenced by stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::inner_node::isfew(), and stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::inner_node::isunderflow().

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
const bool stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::selfverify = traits::selfverify [static]

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
const bool stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::debug = traits::debug [static]

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
node* stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::root [private]

Pointer to the B+ tree's root node, either leaf or inner node.

Definition at line 1224 of file btree.h.

Referenced by stx::btree< _Key, _Data, std::pair< key_type, data_type >, _Compare, _Traits, true >::btree(), stx::btree< _Key, _Data, std::pair< key_type, data_type >, _Compare, _Traits, true >::clear(), stx::btree< _Key, _Data, std::pair< key_type, data_type >, _Compare, _Traits, true >::count(), stx::btree< _Key, _Data, std::pair< key_type, data_type >, _Compare, _Traits, true >::dump(), stx::btree< _Key, _Data, std::pair< key_type, data_type >, _Compare, _Traits, true >::erase_one(), stx::btree< _Key, _Data, std::pair< key_type, data_type >, _Compare, _Traits, true >::erase_one_descend(), stx::btree< _Key, _Data, std::pair< key_type, data_type >, _Compare, _Traits, true >::exists(), stx::btree< _Key, _Data, std::pair< key_type, data_type >, _Compare, _Traits, true >::find(), stx::btree< _Key, _Data, std::pair< key_type, data_type >, _Compare, _Traits, true >::insert_start(), stx::btree< _Key, _Data, std::pair< key_type, data_type >, _Compare, _Traits, true >::lower_bound(), stx::btree< _Key, _Data, std::pair< key_type, data_type >, _Compare, _Traits, true >::operator=(), stx::btree< _Key, _Data, std::pair< key_type, data_type >, _Compare, _Traits, true >::print(), stx::btree< _Key, _Data, std::pair< key_type, data_type >, _Compare, _Traits, true >::restore(), stx::btree< _Key, _Data, std::pair< key_type, data_type >, _Compare, _Traits, true >::swap(), stx::btree< _Key, _Data, std::pair< key_type, data_type >, _Compare, _Traits, true >::upper_bound(), stx::btree< _Key, _Data, std::pair< key_type, data_type >, _Compare, _Traits, true >::verify(), and stx::btree< _Key, _Data, std::pair< key_type, data_type >, _Compare, _Traits, true >::verify_node().

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
leaf_node* stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::headleaf [private]

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
leaf_node* stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::tailleaf [private]

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
tree_stats stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::stats [private]

template<typename _Key, typename _Data, typename _Value = std::pair<_Key, _Data>, typename _Compare = std::less<_Key>, typename _Traits = btree_default_map_traits<_Key, _Data>, bool _Duplicates = false>
key_compare stx::btree< _Key, _Data, _Value, _Compare, _Traits, _Duplicates >::key_less [private]


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

Generated on Sun Sep 7 17:32:39 2008 for STX B+ Tree Template Classes by  doxygen 1.5.6