protected:
class Iter; // forward declaration
+
+ /// \brief Wraps Iter with a reference count.
typedef boost::shared_ptr<Iter> IterPtr;
+ /// \brief A helper iterator interface for \c RRsetCollectionBase.
+ ///
+ /// This is a protected iterator class that is a helper interface
+ /// used by the public iterator. Derived classes of
+ /// \c RRsetCollectionBase are supposed to implement this class and
+ /// the \c getBeginning() and \c getEnd() methods, so that the
+ /// public interator interface can be provided. This is a forward
+ /// iterator only.
class Iter {
public:
+ /// \brief Returns the \c AbstractRRset currently pointed to by
+ /// the iterator.
virtual const isc::dns::AbstractRRset& getValue() = 0;
+
+ /// \brief Returns an \c IterPtr wrapping an Iter pointing to
+ /// the next \c AbstractRRset in sequence in the collection.
virtual IterPtr getNext() = 0;
/// \brief Check if another iterator is equal to this one.
virtual bool equals(Iter& other) = 0;
};
+ /// \brief Returns an \c IterPtr wrapping an Iter pointing to the
+ /// beginning of the collection.
virtual IterPtr getBeginning() = 0;
+
+ /// \brief Returns an \c IterPtr wrapping an Iter pointing past the
+ /// end of the collection.
virtual IterPtr getEnd() = 0;
public:
+ /// \brief A forward \c std::iterator for \c RRsetCollectionBase.
+ ///
+ /// It behaves like a \c std::iterator forward iterator, so please
+ /// see its documentation for usage.
class iterator : std::iterator<std::forward_iterator_tag,
const isc::dns::AbstractRRset>
{
IterPtr iter_;
};
+ /// \brief Returns an iterator pointing to the beginning of the
+ /// collection.
iterator begin() {
return iterator(getBeginning());
}
+ /// \brief Returns an iterator pointing past the end of the
+ /// collection.
iterator end() {
return iterator(getEnd());
}