Git-Url: http://git.frugalware.org/gitweb/gitweb.cgi?p=pacman-g2.git;a=commitdiff;h=051bab1beedfd609b05b4d280164e15be772de5c
commit 051bab1beedfd609b05b4d280164e15be772de5c Author: Michel Hermier <herm...@frugalware.org> Date: Fri Nov 7 08:44:32 2014 +0100 libpacman: More iterator api rework. diff --git a/lib/libpacman/util/flist.h b/lib/libpacman/util/flist.h index 7572884..503ba22 100644 --- a/lib/libpacman/util/flist.h +++ b/lib/libpacman/util/flist.h @@ -37,33 +37,35 @@ namespace flib template <typename Iterator> struct iterator_traits { + typedef Iterator iterator; + typedef typename Iterator::difference_type difference_type; typedef typename Iterator::pointer pointer; typedef typename Iterator::reference reference; typedef typename Iterator::size_type size_type; typedef typename Iterator::value_type value_type; - static Iterator next(const Iterator &i) + static iterator next(const iterator &i) { return i.next(); } - static Iterator previous(const Iterator &i) + static iterator previous(const iterator &i) { return i.previous(); } - static reference reference_of(Iterator i) + static reference reference_of(iterator i) { return *i; } - static pointer pointer_of(Iterator i) + static pointer pointer_of(iterator i) { return i.operator -> (); } - static value_type value_of(const Iterator i) + static value_type value_of(const iterator i) { return *i; } @@ -399,36 +401,37 @@ namespace flib template <> struct iterator_traits<FCListItem *> { - typedef FCListItem *iterable; + typedef FCListItem *iterator; + // typedef typename FCListItem::difference_type difference_type; typedef typename FCListItem::pointer pointer; typedef typename FCListItem::reference reference; typedef typename FCListItem::size_type size_type; typedef typename FCListItem::value_type value_type; - static iterable next(const FCListItem * const i) + static iterator next(const FCListItem * const i) { ASSERT(i != NULL, RET_ERR(PM_ERR_WRONG_ARGS, NULL)); return i->m_next; } - static iterable previous(const FCListItem * const i) + static iterator previous(const FCListItem * const i) { ASSERT(i != NULL, RET_ERR(PM_ERR_WRONG_ARGS, NULL)); return i->m_previous; } #if 0 - static reference reference_of(iterable i) + static reference reference_of(iterator i) { return i->operator * (); } - static pointer pointer_of(iterable i) + static pointer pointer_of(iterator i) { return i->operator -> (); } - static value_type value_of(const iterable i) + static value_type value_of(const iterator i) { return i->operator * (); } @@ -526,7 +529,7 @@ namespace flib template <typename T> struct iterator_traits<FListItem<T> *> { - typedef FListItem<T> *iterable; + typedef FListItem<T> *iterator; // typedef typename FListItem<T>::difference_type difference_type; typedef typename FListItem<T>::pointer pointer; @@ -534,27 +537,27 @@ namespace flib typedef typename FListItem<T>::size_type size_type; typedef typename FListItem<T>::value_type value_type; - static iterable next(const iterable &i) + static iterator next(const iterator &i) { - return static_cast<iterable>(iterator_traits<FCListItem *>::next(i)); + return static_cast<iterator>(iterator_traits<FCListItem *>::next(i)); } - static iterable previous(const iterable &i) + static iterator previous(const iterator &i) { - return static_cast<iterable>(iterator_traits<FCListItem *>::previous(i)); + return static_cast<iterator>(iterator_traits<FCListItem *>::previous(i)); } - static reference reference_of(iterable i) + static reference reference_of(iterator i) { return i->operator * (); } - static pointer pointer_of(iterable i) + static pointer pointer_of(iterator i) { return i->operator -> (); } - static value_type value_of(const iterable i) + static value_type value_of(const iterator i) { return i->operator * (); } @@ -564,16 +567,22 @@ namespace flib class list : protected FCListItem { - public: - typedef flib::FListItem<T> *iterable; + protected: + typedef flib::FListItem<T> *data_holder; + typedef flib::iterator_traits<data_holder> data_holder_traits; + public: /* std::list compatibility */ - typedef T value_type; - typedef flib::iterator_wrapper<iterable> iterator; - typedef flib::iterator_wrapper<iterable, true> reverse_iterator; - typedef flib::const_iterator_wrapper<iterable> const_iterator; - typedef flib::const_iterator_wrapper<iterable, true> const_reverse_iterator; - typedef size_t size_type; + typedef flib::iterator_wrapper<data_holder> iterator; + typedef flib::iterator_wrapper<data_holder, true> reverse_iterator; + typedef flib::const_iterator_wrapper<data_holder> const_iterator; + typedef flib::const_iterator_wrapper<data_holder, true> const_reverse_iterator; + +// typedef typename item_type_traits::difference_type difference_type; + typedef typename data_holder_traits::pointer pointer; + typedef typename data_holder_traits::reference reference; + typedef typename data_holder_traits::size_type size_type; + typedef typename data_holder_traits::value_type value_type; list() : FCListItem(this, this) @@ -724,8 +733,8 @@ namespace flib { ASSERT(position != c_end(), RET_ERR(PM_ERR_WRONG_ARGS, position)); - iterable erased = (iterable)position; - iterable next = erased->next(); + data_holder erased = (data_holder)position; + data_holder next = erased->next(); erased->remove(); delete erased; return iterator(next); @@ -798,7 +807,7 @@ namespace flib virtual iterator add(const value_type &val) { // Default implementation is append - iterable newItem = new flib::FListItem<T>(val); + data_holder newItem = new flib::FListItem<T>(val); newItem->insert_after(last()); return iterator(newItem); } @@ -832,22 +841,22 @@ namespace flib } public: - iterable c_first() const + data_holder c_first() const { ASSERT(this != NULL, RET_ERR(PM_ERR_WRONG_ARGS, NULL)); - return static_cast<iterable>(m_next); + return static_cast<data_holder>(m_next); } - iterable c_last() const + data_holder c_last() const { ASSERT(this != NULL, RET_ERR(PM_ERR_WRONG_ARGS, NULL)); - return static_cast<iterable>(m_previous); + return static_cast<data_holder>(m_previous); } - iterable c_end() const + data_holder c_end() const { ASSERT(this != NULL, RET_ERR(PM_ERR_WRONG_ARGS, NULL)); - return static_cast<iterable>((FCListItem *)this); + return static_cast<data_holder>((FCListItem *)this); } private: diff --git a/lib/libpacman/util/fset.h b/lib/libpacman/util/fset.h index 4d97bb5..e8f8c22 100644 --- a/lib/libpacman/util/fset.h +++ b/lib/libpacman/util/fset.h @@ -35,15 +35,14 @@ namespace flib public: typedef flib::list<T> super_type; - using typename super_type::iterable; using typename super_type::iterator; using typename super_type::value_type; - using super_type::list; - typedef Compare key_compare; typedef Compare value_compare; + using super_type::list; + virtual iterator add(const value_type &data) override { iterator end = this->end(); @@ -52,7 +51,7 @@ namespace flib // ensure we don't have an egality if(next == end || m_compare(data, *next)) { - iterable add = new FListItem<T>(data); + typename super_type::data_holder add = new FListItem<T>(data); add->insert_after(next.previous()); return iterator(add); } _______________________________________________ Frugalware-git mailing list Frugalware-git@frugalware.org http://frugalware.org/mailman/listinfo/frugalware-git