A common index structure for FIB, PIT, StrategyChoice, and Measurements. More...
#include <daemon/table/name-tree.hpp>
Public Types | |
using | const_iterator = Iterator |
Public Member Functions | |
NameTree (size_t nBuckets=1024) | |
const_iterator | begin () const |
const_iterator | end () const |
size_t | eraseIfEmpty (Entry *entry, bool canEraseAncestors=true) |
Delete the entry if it is empty. More... | |
Range | findAllMatches (const Name &name, const EntrySelector &entrySelector=AnyEntry()) const |
All-prefixes match lookup. More... | |
Entry * | findExactMatch (const Name &name, size_t prefixLen=std::numeric_limits< size_t >::max()) const |
Exact match lookup. More... | |
Entry * | findLongestPrefixMatch (const Entry &entry, const EntrySelector &entrySelector=AnyEntry()) const |
Equivalent to findLongestPrefixMatch(entry.getName(), entrySelector) More... | |
template<typename EntryT > | |
Entry * | findLongestPrefixMatch (const EntryT &tableEntry, const EntrySelector &entrySelector=AnyEntry()) const |
Equivalent to findLongestPrefixMatch(getEntry(tableEntry)->getName(), entrySelector) More... | |
Entry * | findLongestPrefixMatch (const Name &name, const EntrySelector &entrySelector=AnyEntry()) const |
Longest prefix matching. More... | |
Entry * | findLongestPrefixMatch (const pit::Entry &pitEntry, const EntrySelector &entrySelector=AnyEntry()) const |
Equivalent to findLongestPrefixMatch(pitEntry.getName(), entrySelector) More... | |
Range | fullEnumerate (const EntrySelector &entrySelector=AnyEntry()) const |
Enumerate all entries. More... | |
template<typename EntryT > | |
Entry * | getEntry (const EntryT &tableEntry) const |
size_t | getNBuckets () const |
Entry & | lookup (const fib::Entry &fibEntry) |
Equivalent to lookup(fibEntry.getPrefix()) More... | |
Entry & | lookup (const measurements::Entry &measurementsEntry) |
Equivalent to lookup(measurementsEntry.getName()) More... | |
Entry & | lookup (const Name &name) |
Equivalent to lookup(name, name.size()) More... | |
Entry & | lookup (const Name &name, size_t prefixLen) |
Find or insert an entry by name. More... | |
Entry & | lookup (const pit::Entry &pitEntry) |
Equivalent to lookup(pitEntry.getName(), std::min(pitEntry.getName().size(), getMaxDepth())) More... | |
Entry & | lookup (const strategy_choice::Entry &strategyChoiceEntry) |
Equivalent to lookup(strategyChoiceEntry.getPrefix()) More... | |
Range | partialEnumerate (const Name &prefix, const EntrySubTreeSelector &entrySubTreeSelector=AnyEntrySubTree()) const |
Enumerate all entries under a prefix. More... | |
size_t | size () const |
Static Public Member Functions | |
static constexpr size_t | getMaxDepth () |
Maximum depth of the name tree. More... | |
Friends | |
class | EnumerationImpl |
A common index structure for FIB, PIT, StrategyChoice, and Measurements.
Definition at line 36 of file name-tree.hpp.
Definition at line 217 of file name-tree.hpp.
|
explicit |
Definition at line 37 of file name-tree.cpp.
|
inline |
Definition at line 261 of file name-tree.hpp.
|
inline |
size_t nfd::name_tree::NameTree::eraseIfEmpty | ( | Entry * | entry, |
bool | canEraseAncestors = true |
||
) |
Delete the entry if it is empty.
entry | a valid entry |
canEraseAncestors | whether ancestors should be deleted if they become empty |
canEraseAncestors
is true, ancestors of the entry are also deleted if they become empty. Definition at line 122 of file name-tree.cpp.
boost::iterator_range< NameTree::const_iterator > nfd::name_tree::NameTree::findAllMatches | ( | const Name & | name, |
const EntrySelector & | entrySelector = AnyEntry() |
||
) | const |
All-prefixes match lookup.
name
, and matches entrySelector
.Example:
name
is inserted during the enumeration, it may or may not be visited. If a name tree entry whose name is a prefix of name
is deleted during the enumeration, undefined behavior may occur. Definition at line 212 of file name-tree.cpp.
Entry * nfd::name_tree::NameTree::findExactMatch | ( | const Name & | name, |
size_t | prefixLen = std::numeric_limits<size_t>::max() |
||
) | const |
Exact match lookup.
name.getPrefix(prefixLen)
, or nullptr if it does not exist Definition at line 149 of file name-tree.cpp.
Entry * nfd::name_tree::NameTree::findLongestPrefixMatch | ( | const Entry & | entry, |
const EntrySelector & | entrySelector = AnyEntry() |
||
) | const |
Equivalent to findLongestPrefixMatch(entry.getName(), entrySelector)
findLongestPrefixMatch(const Name&, const EntrySelector&)
in common cases. Definition at line 177 of file name-tree.cpp.
|
inline |
Equivalent to findLongestPrefixMatch(getEntry(tableEntry)->getName(), entrySelector)
EntryT | fib::Entry or measurements::Entry or strategy_choice::Entry |
findLongestPrefixMatch(const Name&, const EntrySelector&)
in common cases. tableEntry
is not attached to this name tree. Definition at line 176 of file name-tree.hpp.
Entry * nfd::name_tree::NameTree::findLongestPrefixMatch | ( | const Name & | name, |
const EntrySelector & | entrySelector = AnyEntry() |
||
) | const |
Longest prefix matching.
name
and passes entrySelector
, where no other entry with a longer name satisfies those requirements; or nullptr if no entry satisfying those requirements exists Definition at line 161 of file name-tree.cpp.
Entry * nfd::name_tree::NameTree::findLongestPrefixMatch | ( | const pit::Entry & | pitEntry, |
const EntrySelector & | entrySelector = AnyEntry() |
||
) | const |
Equivalent to findLongestPrefixMatch(pitEntry.getName(), entrySelector)
findLongestPrefixMatch(const Name&, const EntrySelector&)
in common cases. pitEntry
is not attached to this name tree. Definition at line 190 of file name-tree.cpp.
boost::iterator_range< NameTree::const_iterator > nfd::name_tree::NameTree::fullEnumerate | ( | const EntrySelector & | entrySelector = AnyEntry() | ) | const |
Enumerate all entries.
entrySelector
Example:
Definition at line 225 of file name-tree.cpp.
|
inline |
Definition at line 77 of file name-tree.hpp.
|
inlinestaticconstexpr |
Maximum depth of the name tree.
Calling NameTree::lookup
with a name with many components would cause the creation of many NameTree entries, which could take very long time. This constant limits the maximum number of name components in the name of a NameTree entry. Thus, it limits the number of NameTree entries created from a long name, bounding the processing complexity.
Definition at line 51 of file name-tree.hpp.
|
inline |
Definition at line 67 of file name-tree.hpp.
Entry & nfd::name_tree::NameTree::lookup | ( | const fib::Entry & | fibEntry | ) |
Equivalent to lookup(fibEntry.getPrefix())
fibEntry | a FIB entry attached to this name tree, or Fib::s_emptyEntry |
lookup(const Name&)
in common cases. Definition at line 66 of file name-tree.cpp.
Entry & nfd::name_tree::NameTree::lookup | ( | const measurements::Entry & | measurementsEntry | ) |
Equivalent to lookup(measurementsEntry.getName())
measurementsEntry | a Measurements entry attached to this name tree |
lookup(const Name&)
in common cases. Definition at line 100 of file name-tree.cpp.
|
inline |
Equivalent to lookup(name, name.size())
Definition at line 98 of file name-tree.hpp.
Entry & nfd::name_tree::NameTree::lookup | ( | const Name & | name, |
size_t | prefixLen | ||
) |
Find or insert an entry by name.
This method seeks a name tree entry of name name.getPrefix(prefixLen)
. If the entry does not exist, it is created along with all ancestors. Existing iterators are unaffected during this operation.
prefixLen
must not exceed name.size()
. prefixLen
must not exceed getMaxDepth()
. Definition at line 43 of file name-tree.cpp.
Entry & nfd::name_tree::NameTree::lookup | ( | const pit::Entry & | pitEntry | ) |
Equivalent to lookup(pitEntry.getName(), std::min(pitEntry.getName().size(), getMaxDepth()))
pitEntry | a PIT entry attached to this name tree |
lookup(const Name&)
in common cases. Definition at line 81 of file name-tree.cpp.
Entry & nfd::name_tree::NameTree::lookup | ( | const strategy_choice::Entry & | strategyChoiceEntry | ) |
Equivalent to lookup(strategyChoiceEntry.getPrefix())
strategyChoiceEntry | a StrategyChoice entry attached to this name tree |
lookup(const Name&)
in common cases. Definition at line 111 of file name-tree.cpp.
boost::iterator_range< NameTree::const_iterator > nfd::name_tree::NameTree::partialEnumerate | ( | const Name & | prefix, |
const EntrySubTreeSelector & | entrySubTreeSelector = AnyEntrySubTree() |
||
) | const |
Enumerate all entries under a prefix.
prefix
, and matches entrySubTreeSelector
.Example:
prefix
is inserted or deleted during the enumeration, it may cause the enumeration to skip entries or visit some entries twice. Definition at line 231 of file name-tree.cpp.
|
inline |
Definition at line 59 of file name-tree.hpp.
|
friend |
Definition at line 278 of file name-tree.hpp.