diff --git a/daemon/table/pit-iterator.cpp b/daemon/table/pit-iterator.cpp index 0cdb3955..b3b9afaf 100644 --- a/daemon/table/pit-iterator.cpp +++ b/daemon/table/pit-iterator.cpp @@ -36,27 +36,24 @@ BOOST_CONCEPT_ASSERT((boost::ForwardIterator)); static_assert(std::is_default_constructible::value, "Iterator must be default-constructible"); -Iterator::Iterator() - : m_iPitEntry(0) -{ -} - -Iterator::Iterator(const NameTree::const_iterator& ntIt) +Iterator::Iterator(const NameTree::const_iterator& ntIt, size_t iPitEntry) : m_ntIt(ntIt) - , m_iPitEntry(0) + , m_iPitEntry(iPitEntry) { } Iterator& Iterator::operator++() { - ++m_iPitEntry; - if (m_iPitEntry < m_ntIt->getPitEntries().size()) { - return *this; + BOOST_ASSERT(m_ntIt != NameTree::const_iterator()); + BOOST_ASSERT(m_iPitEntry < m_ntIt->getPitEntries().size()); + + if (++m_iPitEntry >= m_ntIt->getPitEntries().size()) { + ++m_ntIt; + m_iPitEntry = 0; + BOOST_ASSERT(m_ntIt == NameTree::const_iterator() || m_ntIt->hasPitEntries()); } - ++m_ntIt; - m_iPitEntry = 0; return *this; } diff --git a/daemon/table/pit-iterator.hpp b/daemon/table/pit-iterator.hpp index 061e0771..434dfd0f 100644 --- a/daemon/table/pit-iterator.hpp +++ b/daemon/table/pit-iterator.hpp @@ -37,13 +37,12 @@ namespace pit { class Iterator : public std::iterator { public: - Iterator(); - /** \brief constructor * \param ntIt a name tree iterator that visits name tree entries with one or more PIT entries + * \param iPitEntry make this iterator to dereference to the i-th PIT entry in name tree entry */ explicit - Iterator(const NameTree::const_iterator& ntIt); + Iterator(const NameTree::const_iterator& ntIt = NameTree::const_iterator(), size_t iPitEntry = 0); const Entry& operator*() const @@ -51,10 +50,12 @@ public: return *this->operator->(); } - shared_ptr + const shared_ptr& operator->() const { - return m_ntIt->getPitEntries().at(m_iPitEntry); + BOOST_ASSERT(m_ntIt != NameTree::const_iterator()); + BOOST_ASSERT(m_iPitEntry < m_ntIt->getPitEntries().size()); + return m_ntIt->getPitEntries()[m_iPitEntry]; } Iterator& diff --git a/daemon/table/pit.cpp b/daemon/table/pit.cpp index 6bb246c7..bf17e964 100644 --- a/daemon/table/pit.cpp +++ b/daemon/table/pit.cpp @@ -130,11 +130,5 @@ Pit::begin() const [] (const name_tree::Entry& entry) { return entry.hasPitEntries(); }).begin()); } -Pit::const_iterator -Pit::end() const -{ - return const_iterator(m_nameTree.end()); -} - } // namespace pit } // namespace nfd diff --git a/daemon/table/pit.hpp b/daemon/table/pit.hpp index ab226911..1df3380a 100644 --- a/daemon/table/pit.hpp +++ b/daemon/table/pit.hpp @@ -112,7 +112,10 @@ public: // enumeration * \sa begin() */ const_iterator - end() const; + end() const + { + return Iterator(); + } private: /** \brief erases a PIT Entry