--- /dev/null
+/****************************************************************************
+**
+** Copyright (C) Qxt Foundation. Some rights reserved.
+**
+** This file is part of the QxtCore module of the Qt eXTension library
+**
+** This library is free software; you can redistribute it and/or modify it
+** under the terms of th Common Public License, version 1.0, as published by
+** IBM.
+**
+** This file is provided "AS IS", without WARRANTIES OR CONDITIONS OF ANY
+** KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY
+** WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR
+** FITNESS FOR A PARTICULAR PURPOSE.
+**
+** You should have received a copy of the CPL along with this file.
+** See the LICENSE file and the cpl1.0.txt file included with the source
+** distribution for more information. If you did not receive a copy of the
+** license, contact the Qxt Foundation.
+**
+** <http://libqxt.sourceforge.net> <foundation@libqxt.org>
+**
+****************************************************************************/
+
+
+/**
+\class QxtPairList QxtPairList
+
+\ingroup kit
+
+\brief Searchable List of Pairs
+
+
+Pair list provides a list with two values, a bit like QHash, but with posibility to operate on both values.
+
+in contrast to QHash, every entry has a unique id, you can work with. like a QList.
+
+\code
+QxtPairList<int,int> list;
+
+list.append(1,2);
+list.append(1,5);
+list.append(5,6);
+
+qDebug()<< list.find(1); // "0,1"
+qDebug()<< list.find(SKIP,5); // "2"
+qDebug()<< list.find(5); // "2"
+
+\endcode
+you may allso play around with the list itself
+
+\code
+list.list.append(qMakePair(1,2));
+\endcode
+
+
+*/
+
+
+#include <QList>
+#include <QPair>
+#include <QxtNullable>
+#include <qxtglobal.h>
+
+
+
+template <typename T, typename K>
+class QXT_CORE_EXPORT QxtPairList
+{
+
+
+public:
+
+ QxtPairList()
+ {}
+
+ QxtPairList( const QxtPairList<T,K> & other )
+ {
+ list= other.list;
+ }
+
+ QxtPairList operator= ( const QxtPairList<T,K> & other )
+ {
+ list= other.list;
+ }
+
+
+ void append(T v1, K v2)
+ {
+ list.append(qMakePair(v1,v2));
+ }
+
+
+ /** \brief search entrys by match
+
+ both arguments are optional, due to the use of QxtNullable
+
+ \code
+ find(SKIP,v2);
+ find(v1,SKIP);
+ find(v1);
+ \endcode
+ are all valid
+ */
+
+ QList<int> find( qxNull(T,v1) , qxNull(K,v2) )
+ {
+ QList<int> found;
+
+ if ((!v1.isNull()) and (!v2.isNull()))
+ {
+ for (int i=0;i<list.count();i++)
+ if ((list[i].first()==v1)and(list[i].second()==v2))
+ found.append(i);
+
+ return found;
+ }
+
+ if ((!v1.isNull()) and (v2.isNull()))
+ {
+ for (int i=0;i<list.count();i++)
+ if (list[i].first()==v1)
+ found.append(i);
+
+ return found;
+ }
+
+ if ((v1.isNull()) and (!v2.isNull()))
+ {
+ for (int i=0;i<list.count();i++)
+ if (list[i].second()==v2)
+ found.append(i);
+
+ return found;
+ }
+
+
+
+ }
+
+
+
+ ///remove an entrys position by position
+ void remove(int nr)
+ {
+ list.removeAt(nr);
+ }
+
+ ///remove a list of entrys by position
+ void remove(QList<int> nrs)
+ {
+ int i;
+ foreach (i,nrs)
+ list.removeAt(i);
+ }
+
+
+
+
+ /** \brief operate on the list directly
+
+ you may use the internal list directly, but be carefull
+ dont expect to work the QxPairList to work normal if you mess around with it.
+ */
+
+
+ QList<QPair<T,K> > list;
+};
+