27 #include <type_traits> 
   29 #include <boost/concept/assert.hpp> 
   30 #include <boost/concept_check.hpp> 
   31 #include <type_traits> 
   36 #if HAVE_IS_MOVE_CONSTRUCTIBLE 
   37 static_assert(std::is_move_constructible<DataMatchResult>::value,
 
   38               "DataMatchResult must be MoveConstructible");
 
   39 #endif // HAVE_IS_MOVE_CONSTRUCTIBLE 
   44 BOOST_CONCEPT_ASSERT((boost::ForwardIterator<Pit::const_iterator>));
 
   47 #ifdef HAVE_IS_DEFAULT_CONSTRUCTIBLE 
   48 static_assert(std::is_default_constructible<Pit::const_iterator>::value,
 
   49               "Pit::const_iterator must be default-constructible");
 
   51 BOOST_CONCEPT_ASSERT((boost::DefaultConstructible<Pit::const_iterator>));
 
   52 #endif // HAVE_IS_DEFAULT_CONSTRUCTIBLE 
   55   : m_nameTree(nameTree)
 
   64 std::pair<shared_ptr<pit::Entry>, 
bool>
 
   69   shared_ptr<name_tree::Entry> nameTreeEntry = m_nameTree.
lookup(interest.getName());
 
   70   BOOST_ASSERT(static_cast<bool>(nameTreeEntry));
 
   72   const std::vector<shared_ptr<pit::Entry>>& pitEntries = nameTreeEntry->getPitEntries();
 
   75   auto it = std::find_if(pitEntries.begin(), pitEntries.end(),
 
   76                          [&interest] (
const shared_ptr<pit::Entry>& entry) {
 
   77                            return entry->getInterest().getName() == interest.getName() &&
 
   78                                   entry->getInterest().getSelectors() == interest.getSelectors();
 
   80   if (it != pitEntries.end()) {
 
   81     return { *it, 
false };
 
   84   shared_ptr<pit::Entry> entry = make_shared<pit::Entry>(interest);
 
   85   nameTreeEntry->insertPitEntry(entry);
 
   87   return { entry, 
true };
 
   98     for (
const shared_ptr<pit::Entry>& pitEntry : nte.getPitEntries()) {
 
   99       if (pitEntry->getInterest().matchesData(data))
 
  100         matches.emplace_back(pitEntry);
 
  110   shared_ptr<name_tree::Entry> nameTreeEntry = m_nameTree.
get(*pitEntry);
 
  111   BOOST_ASSERT(static_cast<bool>(nameTreeEntry));
 
  113   nameTreeEntry->erasePitEntry(pitEntry);
 
  123     [] (
const name_tree::Entry& entry) { return entry.hasPitEntries(); }).begin());
 
void erase(shared_ptr< pit::Entry > pitEntry)
erases a PIT Entry 
 
bool eraseEntryIfEmpty(shared_ptr< name_tree::Entry > entry)
Delete a Name Tree Entry if this entry is empty. 
 
shared_ptr< name_tree::Entry > get(const fib::Entry &fibEntry) const 
get NameTree entry from attached FIB entry 
 
boost::iterator_range< const_iterator > findAllMatches(const Name &prefix, const name_tree::EntrySelector &entrySelector=name_tree::AnyEntry()) const 
Enumerate all the name prefixes that satisfy the prefix and entrySelector. 
 
pit::DataMatchResult findAllDataMatches(const Data &data) const 
performs a Data match 
 
std::pair< shared_ptr< pit::Entry >, bool > insert(const Interest &interest)
inserts a PIT entry for Interest 
 
shared_ptr< name_tree::Entry > lookup(const Name &prefix)
Look for the Name Tree Entry that contains this name prefix. 
 
const_iterator begin() const 
returns an iterator pointing to the first PIT entry 
 
boost::iterator_range< const_iterator > fullEnumerate(const name_tree::EntrySelector &entrySelector=name_tree::AnyEntry()) const 
Enumerate all entries, optionally filtered by an EntrySelector. 
 
std::vector< shared_ptr< pit::Entry > > DataMatchResult