#include <iterator.h>
Public Types | |
| typedef IteratorInvalidObjectException | Exception |
| typedef boost::weak_ptr< Item > | ListItem |
Public Member Functions | |
| DoubleListIterator (ListItem oper) | |
| DoubleListIterator () | |
| virtual | ~DoubleListIterator () |
| DoubleListIterator< Item > & | next () |
| DoubleListIterator< Item > & | prev () |
| bool | operator== (const DoubleListIterator< Item > &it) const |
| boost::shared_ptr< Item > | getCurrent () const |
| bool | valid () const |
| bool | isBegin () const |
| bool | isEnd () const |
Protected Member Functions | |
| bool | _invalidItem (ListItem it) |
| virtual bool | validItem () const |
Protected Attributes | |
| ListItem | _cur |
| Position | _curpos |
Private Types | |
| enum | Position { _end, _begin, _valid, _invalid } |
Static Private Attributes | |
| static const Position | pend = _end |
| static const Position | pbegin = _begin |
| static const Position | pvalid = _valid |
| static const Position | pinvalid = _invalid |
Iterator implementation. Interface is similar to the Iterator design pattern (Gof book). It is not supposed to be like stl iterators, because we do NOT need all the functionality stl provides.
It is a generic iterator over items that form a doubly linked list. The item type over which to iterate has to implement 2 methods:
The main difference between stl iterators and this iterator is where information about previous and next items is stored. In this iterator it is in the item itself while in stl it is in a special container.
This list is intended to be used with smart pointers. Which means we can not build the linked list using smart pointers because we would get a dependency cycle and the objects would be never freed. So instead smart pointers we use a weak pointers from which you can can get the smart pointer. We can not simply use raw pointers because we are using smart pointers all over the code so we have to be able to get smart pointer from an iterator.
This class has two design pattern template methods. It can be easily extended to specific iterators overloading isValidItem() method. This is a very powerful feature which gives us enormous flexibilty over a list queue. We can easily iterate only over specific items.
| typedef IteratorInvalidObjectException iterator::DoubleListIterator< Item >::Exception |
ListItem type.
| typedef boost::weak_ptr<Item> iterator::DoubleListIterator< Item >::ListItem |
enum iterator::DoubleListIterator::Position [private] |
| iterator::DoubleListIterator< Item >::DoubleListIterator | ( | ListItem | oper | ) | [inline] |
| iterator::DoubleListIterator< Item >::DoubleListIterator | ( | ) | [inline] |
Created iterator is not in valid state and can not be used to iterate.
| virtual iterator::DoubleListIterator< Item >::~DoubleListIterator | ( | ) | [inline, virtual] |
Dtor.
| bool iterator::DoubleListIterator< Item >::_invalidItem | ( | ListItem | it | ) | [inline, protected] |
Is this item ivalid.
Referenced by iterator::DoubleListIterator< Item >::DoubleListIterator(), iterator::DoubleListIterator< Item >::next(), and iterator::DoubleListIterator< Item >::prev().
| boost::shared_ptr<Item> iterator::DoubleListIterator< Item >::getCurrent | ( | ) | const [inline] |
Get item pointed at.
References iterator::DoubleListIterator< Item >::_cur, iterator::DoubleListIterator< Item >::_curpos, and iterator::DoubleListIterator< Item >::pvalid.
Referenced by gui::PageViewMode_GraphicalOperatorsSelection::addSelectedOperators(), gui::PageViewMode_TextSelection::addSelectedOperators(), gui::PageViewMode_GraphicalOperatorsSelection::addWorkOperators(), gui::PageViewMode_TextSelection::addWorkOperators(), gui::QSPdfOperatorIterator::csCheck(), gui::QSPdfOperatorIterator::current(), pdfobjects::CContentStream::deleteOperator(), gui::PageSpace::findText(), gui::QSPdfOperatorIterator::getCurrent(), pdfobjects::getLastOperator(), pdfobjects::CContentStream::getOperatorsAtPosition(), pdfobjects::CContentStream::insertOperator(), pdfobjects::isCompositeOp(), iterator::DoubleListIterator< Item >::operator==(), pdfobjects::CPageContents::parse(), pdfobjects::CContentStream::replaceOperator(), pdfobjects::CContentStream::replaceText(), and pdfobjects::StateUpdater::updatePdfOperators().
| bool iterator::DoubleListIterator< Item >::isBegin | ( | ) | const [inline] |
Are we before the first valid item.
References iterator::DoubleListIterator< Item >::_curpos, and iterator::DoubleListIterator< Item >::pbegin.
Referenced by pdfobjects::AcceptingPdfOperatorIterator< _NAME_COUNT, T >::AcceptingPdfOperatorIterator(), pdfobjects::CContentStream::deleteOperator(), gui::QSPdfOperatorIterator::isBegin(), gui::QSPdfOperatorIterator::prev(), and pdfobjects::RejectingPdfOperatorIterator< _NAME_COUNT, T >::RejectingPdfOperatorIterator().
| bool iterator::DoubleListIterator< Item >::isEnd | ( | ) | const [inline] |
Are we after the last valid item.
References iterator::DoubleListIterator< Item >::_curpos, and iterator::DoubleListIterator< Item >::pend.
Referenced by pdfobjects::AcceptingPdfOperatorIterator< _NAME_COUNT, T >::AcceptingPdfOperatorIterator(), gui::PageViewMode_GraphicalOperatorsSelection::addSelectedOperators(), gui::PageViewMode_TextSelection::addSelectedOperators(), gui::PageViewMode_GraphicalOperatorsSelection::addWorkOperators(), gui::PageViewMode_TextSelection::addWorkOperators(), pdfobjects::ChangePdfOperatorIterator::ChangePdfOperatorIterator(), pdfobjects::CContentStream::deleteOperator(), gui::PageSpace::findText(), pdfobjects::CContentStream::getOperatorsAtPosition(), pdfobjects::CContentStream::insertOperator(), gui::QSPdfOperatorIterator::isEnd(), gui::QSPdfOperatorIterator::next(), pdfobjects::CPageContents::parse(), pdfobjects::RejectingPdfOperatorIterator< _NAME_COUNT, T >::RejectingPdfOperatorIterator(), pdfobjects::CContentStream::replaceOperator(), pdfobjects::CContentStream::replaceText(), and pdfobjects::StateUpdater::updatePdfOperators().
| DoubleListIterator<Item>& iterator::DoubleListIterator< Item >::next | ( | ) | [inline] |
Go to the next item. The same as ++iterator; in the stl. We can iterate only over specific items that are selected by the validItem() function
References iterator::DoubleListIterator< Item >::_cur, iterator::DoubleListIterator< Item >::_curpos, iterator::DoubleListIterator< Item >::_invalidItem(), ListItem< Item >::_next(), iterator::DoubleListIterator< Item >::pbegin, iterator::DoubleListIterator< Item >::pend, iterator::DoubleListIterator< Item >::pinvalid, iterator::DoubleListIterator< Item >::pvalid, and iterator::DoubleListIterator< Item >::validItem().
Referenced by pdfobjects::AcceptingPdfOperatorIterator< _NAME_COUNT, T >::AcceptingPdfOperatorIterator(), pdfobjects::ChangePdfOperatorIterator::ChangePdfOperatorIterator(), gui::PageSpace::findText(), pdfobjects::CContentStream::getOperatorsAtPosition(), pdfobjects::CContentStream::insertOperator(), gui::QSPdfOperatorIterator::next(), pdfobjects::CPageContents::parse(), pdfobjects::RejectingPdfOperatorIterator< _NAME_COUNT, T >::RejectingPdfOperatorIterator(), pdfobjects::CContentStream::replaceText(), and pdfobjects::StateUpdater::updatePdfOperators().
| bool iterator::DoubleListIterator< Item >::operator== | ( | const DoubleListIterator< Item > & | it | ) | const [inline] |
Equality operator.
References iterator::DoubleListIterator< Item >::getCurrent().
| DoubleListIterator<Item>& iterator::DoubleListIterator< Item >::prev | ( | ) | [inline] |
Go to the previous item. The same as ++reverse_iterator in the stl. We can iterate only over specific items that are selected by the validItem() function.
References iterator::DoubleListIterator< Item >::_cur, iterator::DoubleListIterator< Item >::_curpos, iterator::DoubleListIterator< Item >::_invalidItem(), ListItem< Item >::_prev(), iterator::DoubleListIterator< Item >::pbegin, iterator::DoubleListIterator< Item >::pend, iterator::DoubleListIterator< Item >::pinvalid, iterator::DoubleListIterator< Item >::pvalid, and iterator::DoubleListIterator< Item >::validItem().
Referenced by pdfobjects::AcceptingPdfOperatorIterator< _NAME_COUNT, T >::AcceptingPdfOperatorIterator(), pdfobjects::CContentStream::deleteOperator(), gui::QSPdfOperatorIterator::prev(), pdfobjects::RejectingPdfOperatorIterator< _NAME_COUNT, T >::RejectingPdfOperatorIterator(), and pdfobjects::CContentStream::replaceOperator().
| bool iterator::DoubleListIterator< Item >::valid | ( | ) | const [inline] |
Are we at a valid item.
References iterator::DoubleListIterator< Item >::_curpos, and iterator::DoubleListIterator< Item >::pvalid.
Referenced by gui::QSPdfOperatorIterator::csCheck(), gui::QSPdfOperatorIterator::current(), pdfobjects::CPageChanges::getChanges(), gui::QSPdfOperatorIterator::getCurrent(), pdfobjects::CContentStream::insertOperator(), and gui::QSPdfOperatorIterator::valid().
| virtual bool iterator::DoubleListIterator< Item >::validItem | ( | ) | const [inline, protected, virtual] |
In the base iterator, loop through all objects. We can overload this function to be able to iterate only over specific items.
Reimplemented in pdfobjects::AcceptingPdfOperatorIterator< _NAME_COUNT, T >, pdfobjects::RejectingPdfOperatorIterator< _NAME_COUNT, T >, and pdfobjects::ChangePdfOperatorIterator.
Referenced by iterator::DoubleListIterator< Item >::next(), and iterator::DoubleListIterator< Item >::prev().
ListItem iterator::DoubleListIterator< Item >::_cur [protected] |
Current item.
Referenced by iterator::DoubleListIterator< Item >::getCurrent(), iterator::DoubleListIterator< Item >::next(), iterator::DoubleListIterator< Item >::prev(), pdfobjects::ChangePdfOperatorIterator::validItem(), pdfobjects::RejectingPdfOperatorIterator< _NAME_COUNT, T >::validItem(), and pdfobjects::AcceptingPdfOperatorIterator< _NAME_COUNT, T >::validItem().
Position iterator::DoubleListIterator< Item >::_curpos [protected] |
Current position state.
Referenced by iterator::DoubleListIterator< Item >::DoubleListIterator(), iterator::DoubleListIterator< Item >::getCurrent(), iterator::DoubleListIterator< Item >::isBegin(), iterator::DoubleListIterator< Item >::isEnd(), iterator::DoubleListIterator< Item >::next(), iterator::DoubleListIterator< Item >::prev(), and iterator::DoubleListIterator< Item >::valid().
const Position iterator::DoubleListIterator< Item >::pbegin = _begin [static, private] |
The beggining. Not a valid item.
Referenced by iterator::DoubleListIterator< Item >::isBegin(), iterator::DoubleListIterator< Item >::next(), and iterator::DoubleListIterator< Item >::prev().
const Position iterator::DoubleListIterator< Item >::pend = _end [static, private] |
The end. Not a valid item.
Referenced by iterator::DoubleListIterator< Item >::isEnd(), iterator::DoubleListIterator< Item >::next(), and iterator::DoubleListIterator< Item >::prev().
const Position iterator::DoubleListIterator< Item >::pinvalid = _invalid [static, private] |
Invalid position. E.g. no item specified.
Referenced by iterator::DoubleListIterator< Item >::DoubleListIterator(), iterator::DoubleListIterator< Item >::next(), and iterator::DoubleListIterator< Item >::prev().
const Position iterator::DoubleListIterator< Item >::pvalid = _valid [static, private] |
Valid position in the list.
Referenced by iterator::DoubleListIterator< Item >::getCurrent(), iterator::DoubleListIterator< Item >::next(), iterator::DoubleListIterator< Item >::prev(), and iterator::DoubleListIterator< Item >::valid().