Git-Url: http://git.frugalware.org/gitweb/gitweb.cgi?p=pacman-g2.git;a=commitdiff;h=65d83e7e797d39e04c05c3f904876830b53e797c
commit 65d83e7e797d39e04c05c3f904876830b53e797c Author: Michel Hermier <[email protected]> Date: Tue Aug 19 12:46:00 2014 +0200 libpacman: Rework a little the list template. diff --git a/lib/libpacman/util/flist.h b/lib/libpacman/util/flist.h index 3476c66..e383872 100644 --- a/lib/libpacman/util/flist.h +++ b/lib/libpacman/util/flist.h @@ -25,72 +25,21 @@ #include "pacman.h" #include "util/fcallback.h" - -/* Chained list struct */ -struct __pmlist_t { - struct __pmlist_t *m_previous; - struct __pmlist_t *m_next; - void *m_data; -}; +#include "util/fptrlist.h" #ifdef __cplusplus - -#ifdef F_NOCOMPAT -class FListItemBase - : public __pmlist_t -{ -public: - ListItem() - : ListItem(NULL, NULL) - { } - - ListItem(FListItemBase *previous, FListItemBase *next) - : m_next(next), m_previous(previous) - { } - - virtual ~FListItemBase() = 0; - - ListItemBase *next() - { - return m_next; - } - - ListItemBase *next() const - { - return m_next; - } - - ListItemBase *previous() - { - return m_previous; - } - - const ListItemBase *previous() const - { - return m_previous; - } - -protected: - virtual void *c_data() const = 0; - - bool insert_after(FListItemBase *previous); - - ListItemBase *m_next; - ListItemBase *m_previous; -}; - template <typename T> class FListItem - : public FListItemBase + : public FCListItem { - ListItem() + FListItem() { } - explicit ListItem(T &data) + explicit FListItem(T &data) : m_data(data) { } - virtual ~ListItem() + virtual ~FListItem() { } virtual void *c_data() const override @@ -98,11 +47,6 @@ class FListItem return &m_data; } - T *c_data() const - { - return &m_data; - } - T &data() { return m_data; @@ -113,127 +57,48 @@ class FListItem return m_data; } - ListItem<T> *next() + FListItem<T> *next() { - return FListItemBase::next(); + return FCListItem::next(); } - ListItem<T> *next() const + const FListItem<T> *next() const { - return FListItemBase::next(); + return FCListItem::next(); } - ListItem<T> *previous() + FListItem<T> *previous() { - return FListItemBase::previous(); + return FCListItem::previous(); } - const ListItem<T> *previous() const + const FListItem<T> *previous() const { - return FListItemBase::previous(); + return FCListItem::previous(); } protected: T m_data; private: - ListItem(const ListItem<T> &o); - - ListItem<T> &operator = (const ListItem<T> &o); -}; - -class FListBase - : private FListItemBase -{ -public: - /* std::list compatibility */ - typedef ListItem<T> *iterator; - typedef const List<T>::iterator const_iterator; - - FListBase() - : FListBase(this, this) - { } - - ~FListBase() - { - clear(); - } - - size_t count() const; - - FList::iterator begin() - { - return first(); - } - - FList::const_iterator begin() const - { - return first(); - } - - FList::const_iterator cbegin() const - { - return first(); - } - - List::iterator end() - { - return last(); - } - - List::const_iterator end() const - { - return last(); - } - - List::const_iterator cend() const - { - return last(); - } - - ListItemBase *first() - { - return FListItemBase::next(); - } - - const ListItemBase *first() const - { - return FListItemBase::next(); - } - - ListItemBase *last() - { - return FListItemBase::previous(); - } - - const ListItemBase *last() const - { - return FListItemBase::previous(); - } - -protected: - virtual bool add(FListItem *item); - -protected: - ListBase(const ListItem<T> &o); - - ListBase &operator = (const ListBase &o); + FListItem(const FListItem<T> &o); + FListItem<T> &operator = (const FListItem<T> &o); }; template <typename T> -class List - : private FListBase +class FList + : private FCList { public: /* std::list compatibility */ - typedef ListItem<T> *iterator; - typedef const List<T>::iterator const_iterator; + typedef FListItem<T> *iterator; + typedef const iterator const_iterator; - List() + FList() { } - ~List() + ~FList() { clear(); } @@ -241,32 +106,32 @@ public: void clear(); bool empty() const; - FList::iterator begin() + iterator begin() { return first(); } - FList::const_iterator begin() const + const_iterator begin() const { return first(); } - FList::const_iterator cbegin() const + const_iterator cbegin() const { return first(); } - List::iterator end() + iterator end() { return last(); } - List::const_iterator end() const + const_iterator end() const { return last(); } - List::const_iterator cend() const + const_iterator cend() const { return last(); } @@ -285,6 +150,7 @@ public: public: /* extensions */ +#if 0 bool all_match(const FMatcher &matcher) const { const_iterator end = cend(); @@ -320,38 +186,38 @@ public: } return NULL; } +#endif - ListItem<T> *first() + iterator first() { - return FListBase::first(); + return FCList::first(); } - const ListItem<T> *first() const + const_iterator first() const { - return FListBase::first(); + return FCList::first(); } - ListItem<T> *last() + iterator last() { - return FListBase::last(); + return FCList::last(); } - const ListItem<T> *last() const + const_iterator last() const { - return FListBase::last(); + return FCList::last(); } private: - List(const List &); + FList(const FList &); - List &operator = (const List &); + FList &operator = (const FList &); virtual void *c_data() const override { RET_ERR(PM_ERR_WRONG_ARGS, NULL); } }; -#endif /* F_NOCOMPAT */ #endif /* __cplusplus */ #endif /* F_LIST_H */ diff --git a/lib/libpacman/util/fptrlist.h b/lib/libpacman/util/fptrlist.h index c66cba3..e0a2c63 100644 --- a/lib/libpacman/util/fptrlist.h +++ b/lib/libpacman/util/fptrlist.h @@ -27,14 +27,151 @@ #include "stdbool.h" #include "util/fcallback.h" -#include "util/flist.h" -#ifdef __cplusplus +/* Chained list struct */ +struct __pmlist_t { + struct __pmlist_t *m_previous; + struct __pmlist_t *m_next; + void *m_data; +}; + +#ifndef __cplusplus + +typedef struct FCList FCList; +typedef struct FCListItem FCListItem; + +#else + +class FCListItem + : public __pmlist_t +{ +public: + FCListItem() + : FCListItem(NULL, NULL) + { } + + FCListItem(FCListItem *previous, FCListItem *next) + : m_next(next), m_previous(previous) + { } + + virtual ~FCListItem() = 0; + + virtual void *c_data() const = 0; + + FCListItem *next() + { + return m_next; + } + + FCListItem *next() const + { + return m_next; + } + + FCListItem *previous() + { + return m_previous; + } + + const FCListItem *previous() const + { + return m_previous; + } + +protected: + bool insert_after(FCListItem *previous); + + FCListItem *m_next; + FCListItem *m_previous; +}; + +class FCList + : private FCListItem +{ +public: + /* std::list compatibility */ + typedef FCListItem *iterator; + typedef const iterator const_iterator; + + FCList() + : FCListItem(this, this) + { } + + ~FCList() + { + clear(); + } + + void clear() + { } + + size_t count() const; + + iterator begin() + { + return first(); + } + + const_iterator begin() const + { + return first(); + } + + const_iterator cbegin() const + { + return first(); + } + + iterator end() + { + return last(); + } + + const_iterator end() const + { + return last(); + } + + const_iterator cend() const + { + return last(); + } + +public: + /* extensions */ + iterator first() + { + return FCListItem::next(); + } + + const_iterator first() const + { + return FCListItem::next(); + } + + iterator last() + { + return FCListItem::previous(); + } + + const_iterator last() const + { + return FCListItem::previous(); + } + +protected: + virtual bool add(FCListItem *item); + +protected: + FCList(const FCList &o); + + FCList &operator = (const FCList &o); +}; + extern "C" { #endif #ifndef F_NOCOMPAT - typedef struct __pmlist_t FPtrList; typedef struct __pmlist_t FPtrListItem; #else _______________________________________________ Frugalware-git mailing list [email protected] http://frugalware.org/mailman/listinfo/frugalware-git
