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

Reply via email to