| lab_btree
    Belligerent BTrees | 
#include <btree.h>
| Classes | |
| struct | BTreeNode | 
| A class for the basic node structure of the BTree.  More... | |
| struct | DataPair | 
| A fancy key-value pair which acts as elements in the BTree.  More... | |
| Public Member Functions | |
| BTree () | |
| Constructs a default, order 64 BTree.  More... | |
| BTree (unsigned int order) | |
| Constructs a BTree with the specified order.  More... | |
| BTree (const BTree &other) | |
| Constructs a BTree as a deep copy of another.  More... | |
| bool | is_valid (unsigned int order=64) const | 
| Performs checks to make sure the BTree is valid.  More... | |
| ~BTree () | |
| Destroys a BTree.  More... | |
| const BTree & | operator= (const BTree &rhs) | 
| Assignment operator for a BTree.  More... | |
| void | clear () | 
| Clears the BTree of all data.  More... | |
| void | insert (const K &key, const V &value) | 
| Inserts a key and value into the BTree.  More... | |
| V | find (const K &key) const | 
| Finds the value associated with a given key.  More... | |
| Private Member Functions | |
| void | insert (BTreeNode *subroot, const DataPair &pair) | 
| Private recursive version of the insert function.  More... | |
| V | find (const BTreeNode *subroot, const K &key) const | 
| Private recursive version of the find function.  More... | |
| void | split_child (BTreeNode *parent, size_t child_idx) | 
| Splits a child node of a BTreeNode.  More... | |
| void | clear (BTreeNode *subroot) | 
| Private recursive version of the clear function.  More... | |
| BTreeNode * | copy (const BTreeNode *subroot) | 
| Private recursive version of the copy function.  More... | |
| bool | is_valid (const BTreeNode *subroot, std::vector< DataPair > &data, unsigned int order) const | 
| Private recursive version of the is_valid function.  More... | |
| Private Attributes | |
| unsigned int | order | 
| BTreeNode * | root | 
BTree class.
Provides interfaces for inserting and finding elements in B-tree.
Private recursive version of the clear function.
| subroot | A pointer to the current node being cleared. | 
| 
 | private | 
Private recursive version of the copy function.
| subroot | A pointer to the current node being copied. | 
| V BTree< K, V >::find | ( | const K & | key | ) | const | 
Finds the value associated with a given key.
| key | The key to look up. | 
| 
 | private | 
Private recursive version of the find function.
| subroot | A reference of a pointer to the current BTreeNode. | 
| key | The key we are looking up. | 
| void BTree< K, V >::insert | ( | const K & | key, | 
| const V & | value | ||
| ) | 
Inserts a key and value into the BTree.
If the key is already in the tree do nothing.
| key | The key to insert. | 
| value | The value to insert. | 
| 
 | private | 
Private recursive version of the insert function.
| subroot | A reference of a pointer to the current BTreeNode. | 
| pair | The DataPair to be inserted. | 
| subroot | A reference of a pointer to the current BTreeNode. | 
| pair | The DataPair to be inserted. Note: Original solution used std::lower_bound, but making the students write an equivalent seemed more instructive. | 
| bool BTree< K, V >::is_valid | ( | unsigned int | order = 64 | ) | const | 
Performs checks to make sure the BTree is valid.
Specifically it will check to make sure that an in-order traversal of the tree will result in a sorted sequence of keys. Also verifies that each BTree node doesn't have more nodes than its order.
| 
 | private | 
Private recursive version of the is_valid function.
| subroot | A pointer to the current node being checked for validity. | 
| subroot | A pointer to the current node being checked for validity. | 
| 
 | private | 
Splits a child node of a BTreeNode.
Called if the child became too large. Modifies the parent such that children[child_idx] contains half as many elements as before, and similarly for children[child_idx + 1] (which is a new BTreeNode*).
| parent | The parent whose child we are trying to split. | 
| child_idx | The index of the child in its parent's children vector. | 
Called if the child became too large.
| parent | The parent whose child we are trying to split. | 
| child_idx | The index of the child in its parent's children vector. |