author | eilers <eilers> | 2005-01-16 19:54:28 (UTC) |
---|---|---|
committer | eilers <eilers> | 2005-01-16 19:54:28 (UTC) |
commit | 37f290f048eeade1036cd1dc2239d2a98412c54b (patch) (unidiff) | |
tree | 04dea39ccf2725f4992d5b8bdbf12807e9a67ae2 /libopie2/opiepim/private/opimsortvector.h | |
parent | 07a4cf7e277aee7097c4da286a2559b717054362 (diff) | |
download | opie-37f290f048eeade1036cd1dc2239d2a98412c54b.zip opie-37f290f048eeade1036cd1dc2239d2a98412c54b.tar.gz opie-37f290f048eeade1036cd1dc2239d2a98412c54b.tar.bz2 |
Added new generic sorted for the databook backends. Needed an sortedvector
to do this job, which is now added to private classes..
Diffstat (limited to 'libopie2/opiepim/private/opimsortvector.h') (more/less context) (ignore whitespace changes)
-rw-r--r-- | libopie2/opiepim/private/opimsortvector.h | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/libopie2/opiepim/private/opimsortvector.h b/libopie2/opiepim/private/opimsortvector.h index 6c21339..11a40ac 100644 --- a/libopie2/opiepim/private/opimsortvector.h +++ b/libopie2/opiepim/private/opimsortvector.h | |||
@@ -32,48 +32,51 @@ | |||
32 | 32 | ||
33 | #include <opie2/opimglobal.h> | 33 | #include <opie2/opimglobal.h> |
34 | 34 | ||
35 | #include <qvector.h> | 35 | #include <qvector.h> |
36 | 36 | ||
37 | namespace Opie { | 37 | namespace Opie { |
38 | namespace Internal { | 38 | namespace Internal { |
39 | template<class T> | 39 | template<class T> |
40 | struct OPimSortVectorContainer { | 40 | struct OPimSortVectorContainer { |
41 | T item; | 41 | T item; |
42 | }; | 42 | }; |
43 | 43 | ||
44 | template<class T> | 44 | template<class T> |
45 | class OPimSortVector : public QVector<OPimSortVectorContainer<T> > { | 45 | class OPimSortVector : public QVector<OPimSortVectorContainer<T> > { |
46 | typedef OPimSortVectorContainer<T> VectorItem; | 46 | typedef OPimSortVectorContainer<T> VectorItem; |
47 | public: | 47 | public: |
48 | OPimSortVector( uint size, bool asc, int sort ); | 48 | OPimSortVector( uint size, bool asc, int sort ); |
49 | int compareItems( QCollection::Item d1, QCollection::Item d2 ); | 49 | int compareItems( QCollection::Item d1, QCollection::Item d2 ); |
50 | bool insert( uint, const T& t ); | 50 | bool insert( uint, const T& t ); |
51 | UID uidAt( uint i )const; | 51 | UID uidAt( uint i )const; |
52 | 52 | ||
53 | protected: | 53 | protected: |
54 | int testString( const QString&, const QString& )const; | 54 | int testString( const QString&, const QString& )const; |
55 | int testDate( const QDate&, const QDate& )const; | 55 | int testDate( const QDate&, const QDate& )const; |
56 | int testTime( const QTime&, const QTime& )const; | ||
57 | int testDateTime( const QDateTime& left, | ||
58 | const QDateTime& right )const; | ||
56 | protected: | 59 | protected: |
57 | bool sortAscending()const; | 60 | bool sortAscending()const; |
58 | int sortOrder()const; | 61 | int sortOrder()const; |
59 | 62 | ||
60 | private: | 63 | private: |
61 | bool m_ascending : 1; | 64 | bool m_ascending : 1; |
62 | int m_sort; | 65 | int m_sort; |
63 | virtual int compareItems( const T& item1, const T& item2 ) = 0; | 66 | virtual int compareItems( const T& item1, const T& item2 ) = 0; |
64 | }; | 67 | }; |
65 | 68 | ||
66 | template<class T> | 69 | template<class T> |
67 | OPimSortVector<T>::OPimSortVector( uint size, bool asc, int sort ) | 70 | OPimSortVector<T>::OPimSortVector( uint size, bool asc, int sort ) |
68 | : QVector<VectorItem>( size ), m_ascending( asc ), | 71 | : QVector<VectorItem>( size ), m_ascending( asc ), |
69 | m_sort( sort ) { | 72 | m_sort( sort ) { |
70 | this->setAutoDelete( true ); | 73 | this->setAutoDelete( true ); |
71 | } | 74 | } |
72 | 75 | ||
73 | /** | 76 | /** |
74 | * Returns: | 77 | * Returns: |
75 | * 0 if item1 == item2 | 78 | * 0 if item1 == item2 |
76 | * | 79 | * |
77 | * non-zero if item1 != item2 | 80 | * non-zero if item1 != item2 |
78 | * | 81 | * |
79 | * This function returns int rather than bool so that reimplementations | 82 | * This function returns int rather than bool so that reimplementations |
@@ -99,40 +102,71 @@ bool OPimSortVector<T>::sortAscending()const { | |||
99 | 102 | ||
100 | template<class T> | 103 | template<class T> |
101 | int OPimSortVector<T>::sortOrder()const { | 104 | int OPimSortVector<T>::sortOrder()const { |
102 | return m_sort; | 105 | return m_sort; |
103 | } | 106 | } |
104 | 107 | ||
105 | template<class T> | 108 | template<class T> |
106 | bool OPimSortVector<T>::insert( uint i, const T& record ) { | 109 | bool OPimSortVector<T>::insert( uint i, const T& record ) { |
107 | VectorItem *item = new VectorItem; | 110 | VectorItem *item = new VectorItem; |
108 | item->item = record; | 111 | item->item = record; |
109 | return QVector<VectorItem>::insert( i, item ); | 112 | return QVector<VectorItem>::insert( i, item ); |
110 | } | 113 | } |
111 | 114 | ||
112 | template<class T> | 115 | template<class T> |
113 | UID OPimSortVector<T>::uidAt( uint index )const { | 116 | UID OPimSortVector<T>::uidAt( uint index )const { |
114 | return this->at( index )->item.uid(); | 117 | return this->at( index )->item.uid(); |
115 | } | 118 | } |
116 | 119 | ||
117 | template<class T> | 120 | template<class T> |
118 | inline int OPimSortVector<T>::testString( const QString& left, | 121 | inline int OPimSortVector<T>::testString( const QString& left, |
119 | const QString& right )const { | 122 | const QString& right )const { |
120 | return QString::compare( left, right ); | 123 | return QString::compare( left, right ); |
121 | } | 124 | } |
122 | 125 | ||
126 | |||
123 | template<class T> | 127 | template<class T> |
124 | inline int OPimSortVector<T>::testDate( const QDate& left, | 128 | inline int OPimSortVector<T>::testDate( const QDate& left, |
125 | const QDate& right )const { | 129 | const QDate& right )const { |
126 | int ret = 0; | 130 | int ret = 0; |
127 | if ( !left .isValid() ) ret++; | 131 | if ( !left .isValid() ) ret++; |
128 | if ( !right.isValid() ) ret--; | 132 | if ( !right.isValid() ) ret--; |
129 | 133 | ||
130 | if ( left.isValid() && right.isValid() ) | 134 | if ( left.isValid() && right.isValid() ) |
131 | ret += left < right ? -1 : 1; | 135 | ret += left < right ? -1 : 1; |
132 | 136 | ||
133 | return ret; | 137 | return ret; |
134 | } | 138 | } |
139 | |||
140 | template<class T> | ||
141 | inline int OPimSortVector<T>::testTime( const QTime& left, | ||
142 | const QTime& right )const { | ||
143 | int ret = 0; | ||
144 | if ( !left .isValid() ) ret++; | ||
145 | if ( !right.isValid() ) ret--; | ||
146 | |||
147 | if ( left.isValid() && right.isValid() ){ | ||
148 | ret += left < right ? -1 : 1; | ||
149 | } | ||
150 | |||
151 | return ret; | ||
152 | } | ||
153 | |||
154 | template<class T> | ||
155 | inline int OPimSortVector<T>::testDateTime( const QDateTime& left, | ||
156 | const QDateTime& right )const { | ||
157 | int ret = 0; | ||
158 | if ( !left .isValid() ) ret++; | ||
159 | if ( !right.isValid() ) ret--; | ||
160 | |||
161 | if ( left.isValid() && right.isValid() ){ | ||
162 | ret += left < right ? -1 : 1; | ||
163 | } | ||
164 | |||
165 | return ret; | ||
166 | |||
167 | } | ||
168 | |||
135 | } | 169 | } |
136 | } | 170 | } |
137 | 171 | ||
138 | #endif | 172 | #endif |