00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 #ifndef OSORTABLEVALUELIST_H
00032 #define OSORTABLEVALUELIST_H
00033
00034 #if QT_VERSION >= 0x030000
00035 #include <qtl.h>
00036 #include <qpair.h>
00037 #else
00038 #include <opie2/otl.h>
00039 #include <opie2/opair.h>
00040 #endif
00041 #include <qvaluelist.h>
00042
00043 template<class T, class Key = int> class OSortableItem : public QPair<Key,T>
00044 {
00045 public:
00046 OSortableItem( Key i, const T& t ) : QPair<Key, T>( i, t ) {}
00047 OSortableItem( const OSortableItem<T, Key> &rhs )
00048 : QPair<Key,T>( rhs.first, rhs.second ) {}
00049
00050 OSortableItem() {}
00051
00052 OSortableItem<T, Key> &operator=( const OSortableItem<T, Key>& i ) {
00053 first = i.first;
00054 second = i.second;
00055 return *this;
00056 }
00057
00058
00059 bool operator> ( const OSortableItem<T, Key>& i2 ) const {
00060 return (i2.first < first);
00061 }
00062 bool operator< ( const OSortableItem<T, Key>& i2 ) const {
00063 return (first < i2.first);
00064 }
00065 bool operator>= ( const OSortableItem<T, Key>& i2 ) const {
00066 return (first >= i2.first);
00067 }
00068 bool operator<= ( const OSortableItem<T, Key>& i2 ) const {
00069 return !(i2.first < first);
00070 }
00071 bool operator== ( const OSortableItem<T, Key>& i2 ) const {
00072 return (first == i2.first);
00073 }
00074 bool operator!= ( const OSortableItem<T, Key>& i2 ) const {
00075 return (first != i2.first);
00076 }
00077
00078 T& value() {
00079 return second;
00080 }
00081 const T& value() const {
00082 return second;
00083 }
00084
00085 Key index() const {
00086 return first;
00087 }
00088 };
00089
00090
00091
00092 template <class T, class Key = int>
00093 class OSortableValueList : public QValueList<OSortableItem<T, Key> >
00094 {
00095 public:
00096 void insert( Key i, const T& t ) {
00097 QValueList<OSortableItem<T, Key> >::append( OSortableItem<T, Key>( i, t ) );
00098 }
00099
00100
00101 T& operator[]( Key i ) {
00102 return QValueList<OSortableItem<T, Key> >::operator[]( i ).value();
00103 }
00104 const T& operator[]( Key i ) const {
00105 return QValueList<OSortableItem<T, Key> >::operator[]( i ).value();
00106 }
00107
00108 void sort() {
00109 qHeapSort( *this );
00110 }
00111 };
00112
00113
00114
00115
00116
00117 #endif // OSORTABLEVALUELIST_H