class RefTrieNode
|
RefTrieNode definition. More... |
|
|
Public Types
- typedef IPNet<A> Key
- typedef MiniTraits<Payload>::NonConst PPayload
Public Methods
Public Static Methods
RefTrieNode's are the elements of a RefTrie.
Each node is associated to a Key and possibly a Payload.
Nodes with a Payload ("full") can have 0, 1 or 2 children.
Nodes without a Payload ("empty") can only be internal nodes,
and MUST have 2 children (or they have no reason to exist).
Children have a Key which is strictly contained in their
parent's Key -- more precisely, they are in either the left
or the right half of the parent's Key. The branch to which
a child is attached (left or right) is defined accordingly.
typedef MiniTraits<Payload>::NonConst PPayload | PPayload |
RefTrieNode ()
| RefTrieNode |
Constructors
RefTrieNode (const Key& key, const Payload& p, RefTrieNode* up = 0)
| RefTrieNode |
RefTrieNode (const Key& key, RefTrieNode* up = 0)
| RefTrieNode |
~RefTrieNode ()
| ~RefTrieNode |
[static]
add a node to a subtree
Returns: a pointer to the node.
erase current node, replumb. Returns the new root.
main search routine. Given a key, returns a node.
const RefTrieNode * const_find (const Key& key)
| const_find |
[const]
RefTrieNode * find_subtree (const Key &key)
| find_subtree |
aux search routine.
Given a key, returns a subtree contained in the key, irrespective
of the presence of a payload in the node.
Given a key, find the node with that key and a payload.
If the next doesn't exist or does not have a payload, find
the next node in the iterator sequence. XXX check the description.
bool has_payload ()
| has_payload |
[const]
bool has_active_payload ()
| has_active_payload |
[const]
const Payload & const_p ()
| const_p |
[const]
void set_payload (const Payload& p)
| set_payload |
uint32_t references ()
| references |
[const]
void incr_refcount ()
| incr_refcount |
void decr_refcount ()
| decr_refcount |
[const]
[const]
void print (int indent, const char *msg)
| print |
[const]
[const]
void delete_subtree ()
| delete_subtree |
helper function to delete an entire subtree (including the
root).
[const]
debugging, validates a node by checking pointers and Key invariants.
[const]
Returns: the leftmost node under this node
void find_bounds (const A& a, A &lo, A &hi)
| find_bounds |
[const]
Algorithm:
n = find(a);
if we have no route (hence no default), provide a fake 0/0;
set lo and hi to the boundaries of the current node.
if n.is_a_leaf() we are done (results are the extremes of the entry)
Otherwise: we are in an intermediate node, and a can be in positions
1..5 if the node has 2 children, or 1'..3' if it has 1 child.
n: |---------------.----------------|
a: 1 2 3 4 5
|--X--| |--Y--|
a: 1' 2' 3'
|--X--|
Behaviour is the following:
case 1 and 1': lo already set, hi = (lowest address in X)-1
case 2 and 2': set n = X and repeat
case 3: lo = (highest addr in X)+1, hi = (lowest addr in Y)-1
case 3': lo = (highest addr in X)+1, hi is already set
case 4: set n = Y and repeat
case 5: lo = (highest addr in Y)+1, hi is already set
|
Returns: the boundaries ("lo" and "hi") of the largest range that
contains 'a' and maps to the same route entry.
[const]
Returns: the lowest address in a subtree which has a route.
Search starting from left or right until a full node is found.
[const]
Returns: the highest address in a subtree which has a route.
Search starting from right or left until a full node is found.
Generated by: pavlin on possum.icir.org on Thu Nov 6 23:46:46 2003, using kdoc 2.0a54+XORP. |