summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--libopie/pim/orecordlist.h53
-rw-r--r--libopie2/opiepim/orecordlist.h53
2 files changed, 98 insertions, 8 deletions
diff --git a/libopie/pim/orecordlist.h b/libopie/pim/orecordlist.h
index 1795938..c63d813 100644
--- a/libopie/pim/orecordlist.h
+++ b/libopie/pim/orecordlist.h
@@ -1,210 +1,255 @@
1 1
2#ifndef OPIE_RECORD_LIST_H 2#ifndef OPIE_RECORD_LIST_H
3#define OPIE_RECORD_LIST_H 3#define OPIE_RECORD_LIST_H
4 4
5#include <qarray.h> 5#include <qarray.h>
6 6
7#include "otemplatebase.h" 7#include "otemplatebase.h"
8#include "opimrecord.h" 8#include "opimrecord.h"
9 9
10/** 10/**
11 * Our List Iterator 11 * Our List Iterator
12 * it behaves like STL or Qt 12 * it behaves like STL or Qt
13 * 13 *
14 * for(it = list.begin(); it != list.end(); ++it ) 14 * for(it = list.begin(); it != list.end(); ++it )
15 * doSomeCoolStuff( (*it) ); 15 * doSomeCoolStuff( (*it) );
16 */ 16 */
17template <class T> class ORecordList; 17template <class T> class ORecordList;
18template <class T = OPimRecord> 18template <class T = OPimRecord>
19class ORecordListIterator { 19class ORecordListIterator {
20 friend class ORecordList<T>; 20 friend class ORecordList<T>;
21public: 21public:
22 typedef OTemplateBase<T> Base; 22 typedef OTemplateBase<T> Base;
23 23
24 /** 24 /**
25 * The c'tor used internally from 25 * The c'tor used internally from
26 * ORecordList 26 * ORecordList
27 */ 27 */
28 ORecordListIterator( const QArray<int>, const Base* ); 28 ORecordListIterator( const QArray<int>, const Base* );
29 29
30 /** 30 /**
31 * The standard c'tor 31 * The standard c'tor
32 */ 32 */
33 ORecordListIterator(); 33 ORecordListIterator();
34 ~ORecordListIterator(); 34 ~ORecordListIterator();
35 35
36 ORecordListIterator( const ORecordListIterator& ); 36 ORecordListIterator( const ORecordListIterator& );
37 ORecordListIterator &operator=(const ORecordListIterator& ); 37 ORecordListIterator &operator=(const ORecordListIterator& );
38 38
39 /** 39 /**
40 * a * operator ;) 40 * a * operator ;)
41 * use it like this T = (*it); 41 * use it like this T = (*it);
42 */ 42 */
43 T operator*(); 43 T operator*();
44 ORecordListIterator &operator++(); 44 ORecordListIterator &operator++();
45 ORecordListIterator &operator--(); 45 ORecordListIterator &operator--();
46 46
47 bool operator==( const ORecordListIterator& it ); 47 bool operator==( const ORecordListIterator& it );
48 bool operator!=( const ORecordListIterator& it ); 48 bool operator!=( const ORecordListIterator& it );
49
50 /**
51 * the current item
52 */
53 uint current()const;
54
55 /**
56 * the number of items
57 */
58 uint count()const;
59
60 /**
61 * sets the current item
62 */
63 void setCurrent( uint cur );
49 64
50private: 65private:
51 QArray<int> m_uids; 66 QArray<int> m_uids;
52 int m_current; 67 uint m_current;
53 const Base* m_temp; 68 const Base* m_temp;
54 bool m_end : 1; 69 bool m_end : 1;
55 T m_record; 70 T m_record;
56 71
57 /* d pointer for future versions */ 72 /* d pointer for future versions */
58 class IteratorPrivate; 73 class IteratorPrivate;
59 IteratorPrivate *d; 74 IteratorPrivate *d;
60}; 75};
61/** 76/**
62 * The recordlist used as a return type 77 * The recordlist used as a return type
63 * from OPimAccessTemplate 78 * from OPimAccessTemplate
64 */ 79 */
65template <class T = OPimRecord > 80template <class T = OPimRecord >
66class ORecordList { 81class ORecordList {
67public: 82public:
68 typedef OTemplateBase<T> Base; 83 typedef OTemplateBase<T> Base;
69 typedef ORecordListIterator<T> Iterator; 84 typedef ORecordListIterator<T> Iterator;
70 85
71 /** 86 /**
72 * c'tor 87 * c'tor
73 */ 88 */
74 ORecordList () { 89 ORecordList () {
75 } 90 }
76 ORecordList( const QArray<int>& ids, 91 ORecordList( const QArray<int>& ids,
77 const Base* ); 92 const Base* );
78 ~ORecordList(); 93 ~ORecordList();
79 94
80 /** 95 /**
81 * the first iterator 96 * the first iterator
82 */ 97 */
83 Iterator begin(); 98 Iterator begin();
84 99
85 /** 100 /**
86 * the end 101 * the end
87 */ 102 */
88 Iterator end(); 103 Iterator end();
104
105 /**
106 * the number of items in the list
107 */
108 uint count()const;
109
110 // FIXME implemenent remove
89 /* 111 /*
90 ConstIterator begin()const; 112 ConstIterator begin()const;
91 ConstIterator end()const; 113 ConstIterator end()const;
92 */ 114 */
93private: 115private:
94 QArray<int> m_ids; 116 QArray<int> m_ids;
95 const Base* m_acc; 117 const Base* m_acc;
96}; 118};
97 119
98/* ok now implement it */ 120/* ok now implement it */
99template <class T> 121template <class T>
100ORecordListIterator<T>::ORecordListIterator() { 122ORecordListIterator<T>::ORecordListIterator() {
101 m_current = 0; 123 m_current = 0;
102 m_temp = 0l; 124 m_temp = 0l;
103 m_end = true; 125 m_end = true;
104 m_record = T(); 126 m_record = T();
105} 127}
106template <class T> 128template <class T>
107ORecordListIterator<T>::~ORecordListIterator() { 129ORecordListIterator<T>::~ORecordListIterator() {
108/* nothing to delete */ 130/* nothing to delete */
109} 131}
110 132
111template <class T> 133template <class T>
112ORecordListIterator<T>::ORecordListIterator( const ORecordListIterator<T>& it) { 134ORecordListIterator<T>::ORecordListIterator( const ORecordListIterator<T>& it) {
113// qWarning("ORecordListIterator copy c'tor"); 135// qWarning("ORecordListIterator copy c'tor");
114 m_uids = it.m_uids; 136 m_uids = it.m_uids;
115 m_current = it.m_current; 137 m_current = it.m_current;
116 m_temp = it.m_temp; 138 m_temp = it.m_temp;
117 m_end = it.m_end; 139 m_end = it.m_end;
118 m_record = it.m_record; 140 m_record = it.m_record;
119} 141}
120 142
121template <class T> 143template <class T>
122ORecordListIterator<T> &ORecordListIterator<T>::operator=( const ORecordListIterator<T>& it) { 144ORecordListIterator<T> &ORecordListIterator<T>::operator=( const ORecordListIterator<T>& it) {
123 m_uids = it.m_uids; 145 m_uids = it.m_uids;
124 m_current = it.m_current; 146 m_current = it.m_current;
125 m_temp = it.m_temp; 147 m_temp = it.m_temp;
126 m_end = it.m_end; 148 m_end = it.m_end;
127// m_record = it.m_record; 149// m_record = it.m_record;
128 150
129 return *this; 151 return *this;
130} 152}
131 153
132template <class T> 154template <class T>
133T ORecordListIterator<T>::operator*() { 155T ORecordListIterator<T>::operator*() {
134// qWarning("operator* %d %d", m_current, m_uids[m_current] ); 156// qWarning("operator* %d %d", m_current, m_uids[m_current] );
135 if (!m_end ) 157 if (!m_end )
136 m_record = m_temp->find( m_uids[m_current] ); 158 /* FIXME
159 * until the cache is in place
160 * we do the uid match uid check
161 */
162 if(m_record.uid() != m_uids[m_current] )
163 m_record = m_temp->find( m_uids[m_current] );
137 else 164 else
138 m_record = T(); 165 m_record = T();
139 166
140 return m_record; 167 return m_record;
141} 168}
142 169
143template <class T> 170template <class T>
144ORecordListIterator<T> &ORecordListIterator<T>::operator++() { 171ORecordListIterator<T> &ORecordListIterator<T>::operator++() {
145 if (m_current < (int)m_uids.count() ) { 172 if (m_current < m_uids.count() ) {
146 m_end = false; 173 m_end = false;
147 ++m_current; 174 ++m_current;
148 }else 175 }else
149 m_end = true; 176 m_end = true;
150 177
151 return *this; 178 return *this;
152} 179}
153template <class T> 180template <class T>
154ORecordListIterator<T> &ORecordListIterator<T>::operator--() { 181ORecordListIterator<T> &ORecordListIterator<T>::operator--() {
155 if ( m_current > 0 ) { 182 if ( m_current > 0 ) {
156 --m_current; 183 --m_current;
157 m_end = false; 184 m_end = false;
158 } else 185 } else
159 m_end = true; 186 m_end = true;
160 187
161 return *this; 188 return *this;
162} 189}
163 190
164template <class T> 191template <class T>
165bool ORecordListIterator<T>::operator==( const ORecordListIterator<T>& it ) { 192bool ORecordListIterator<T>::operator==( const ORecordListIterator<T>& it ) {
166 193
167 /* if both are at we're the same.... */ 194 /* if both are at we're the same.... */
168 if ( m_end == it.m_end ) return true; 195 if ( m_end == it.m_end ) return true;
169 196
170 if ( m_uids != it.m_uids ) return false; 197 if ( m_uids != it.m_uids ) return false;
171 if ( m_current != it.m_current ) return false; 198 if ( m_current != it.m_current ) return false;
172 if ( m_temp != it.m_temp ) return false; 199 if ( m_temp != it.m_temp ) return false;
173 200
174 return true; 201 return true;
175} 202}
176template <class T> 203template <class T>
177bool ORecordListIterator<T>::operator!=( const ORecordListIterator<T>& it ) { 204bool ORecordListIterator<T>::operator!=( const ORecordListIterator<T>& it ) {
178 return !(*this == it ); 205 return !(*this == it );
179} 206}
180template <class T> 207template <class T>
181ORecordListIterator<T>::ORecordListIterator( const QArray<int> uids, 208ORecordListIterator<T>::ORecordListIterator( const QArray<int> uids,
182 const Base* t ) 209 const Base* t )
183 : m_uids( uids ), m_current( 0 ), m_temp( t ), m_end( false ) 210 : m_uids( uids ), m_current( 0 ), m_temp( t ), m_end( false )
184{ 211{
185} 212}
186 213template <class T>
214uint ORecordListIterator<T>::current()const {
215 return m_current;
216}
217template <class T>
218void ORecordListIterator<T>::setCurrent( uint cur ) {
219 if( cur < m_uids.count() ) {
220 m_end = false;
221 m_current= cur;
222 }
223}
224template <class T>
225uint ORecordListIterator<T>::count()const {
226 return m_uids.count();
227}
187template <class T> 228template <class T>
188ORecordList<T>::ORecordList( const QArray<int>& ids, 229ORecordList<T>::ORecordList( const QArray<int>& ids,
189 const Base* acc ) 230 const Base* acc )
190 : m_ids( ids ), m_acc( acc ) 231 : m_ids( ids ), m_acc( acc )
191{ 232{
192} 233}
193template <class T> 234template <class T>
194ORecordList<T>::~ORecordList() { 235ORecordList<T>::~ORecordList() {
195/* nothing to do here */ 236/* nothing to do here */
196} 237}
197template <class T> 238template <class T>
198ORecordList<T>::Iterator ORecordList<T>::begin() { 239ORecordList<T>::Iterator ORecordList<T>::begin() {
199 Iterator it( m_ids, m_acc ); 240 Iterator it( m_ids, m_acc );
200 return it; 241 return it;
201} 242}
202template <class T> 243template <class T>
203ORecordList<T>::Iterator ORecordList<T>::end() { 244ORecordList<T>::Iterator ORecordList<T>::end() {
204 Iterator it( m_ids, m_acc ); 245 Iterator it( m_ids, m_acc );
205 it.m_end = true; 246 it.m_end = true;
206 it.m_current = m_ids.count(); 247 it.m_current = m_ids.count();
207 248
208 return it; 249 return it;
209} 250}
251template <class T>
252uint ORecordList<T>::count()const {
253return m_ids.count();
254}
210#endif 255#endif
diff --git a/libopie2/opiepim/orecordlist.h b/libopie2/opiepim/orecordlist.h
index 1795938..c63d813 100644
--- a/libopie2/opiepim/orecordlist.h
+++ b/libopie2/opiepim/orecordlist.h
@@ -1,210 +1,255 @@
1 1
2#ifndef OPIE_RECORD_LIST_H 2#ifndef OPIE_RECORD_LIST_H
3#define OPIE_RECORD_LIST_H 3#define OPIE_RECORD_LIST_H
4 4
5#include <qarray.h> 5#include <qarray.h>
6 6
7#include "otemplatebase.h" 7#include "otemplatebase.h"
8#include "opimrecord.h" 8#include "opimrecord.h"
9 9
10/** 10/**
11 * Our List Iterator 11 * Our List Iterator
12 * it behaves like STL or Qt 12 * it behaves like STL or Qt
13 * 13 *
14 * for(it = list.begin(); it != list.end(); ++it ) 14 * for(it = list.begin(); it != list.end(); ++it )
15 * doSomeCoolStuff( (*it) ); 15 * doSomeCoolStuff( (*it) );
16 */ 16 */
17template <class T> class ORecordList; 17template <class T> class ORecordList;
18template <class T = OPimRecord> 18template <class T = OPimRecord>
19class ORecordListIterator { 19class ORecordListIterator {
20 friend class ORecordList<T>; 20 friend class ORecordList<T>;
21public: 21public:
22 typedef OTemplateBase<T> Base; 22 typedef OTemplateBase<T> Base;
23 23
24 /** 24 /**
25 * The c'tor used internally from 25 * The c'tor used internally from
26 * ORecordList 26 * ORecordList
27 */ 27 */
28 ORecordListIterator( const QArray<int>, const Base* ); 28 ORecordListIterator( const QArray<int>, const Base* );
29 29
30 /** 30 /**
31 * The standard c'tor 31 * The standard c'tor
32 */ 32 */
33 ORecordListIterator(); 33 ORecordListIterator();
34 ~ORecordListIterator(); 34 ~ORecordListIterator();
35 35
36 ORecordListIterator( const ORecordListIterator& ); 36 ORecordListIterator( const ORecordListIterator& );
37 ORecordListIterator &operator=(const ORecordListIterator& ); 37 ORecordListIterator &operator=(const ORecordListIterator& );
38 38
39 /** 39 /**
40 * a * operator ;) 40 * a * operator ;)
41 * use it like this T = (*it); 41 * use it like this T = (*it);
42 */ 42 */
43 T operator*(); 43 T operator*();
44 ORecordListIterator &operator++(); 44 ORecordListIterator &operator++();
45 ORecordListIterator &operator--(); 45 ORecordListIterator &operator--();
46 46
47 bool operator==( const ORecordListIterator& it ); 47 bool operator==( const ORecordListIterator& it );
48 bool operator!=( const ORecordListIterator& it ); 48 bool operator!=( const ORecordListIterator& it );
49
50 /**
51 * the current item
52 */
53 uint current()const;
54
55 /**
56 * the number of items
57 */
58 uint count()const;
59
60 /**
61 * sets the current item
62 */
63 void setCurrent( uint cur );
49 64
50private: 65private:
51 QArray<int> m_uids; 66 QArray<int> m_uids;
52 int m_current; 67 uint m_current;
53 const Base* m_temp; 68 const Base* m_temp;
54 bool m_end : 1; 69 bool m_end : 1;
55 T m_record; 70 T m_record;
56 71
57 /* d pointer for future versions */ 72 /* d pointer for future versions */
58 class IteratorPrivate; 73 class IteratorPrivate;
59 IteratorPrivate *d; 74 IteratorPrivate *d;
60}; 75};
61/** 76/**
62 * The recordlist used as a return type 77 * The recordlist used as a return type
63 * from OPimAccessTemplate 78 * from OPimAccessTemplate
64 */ 79 */
65template <class T = OPimRecord > 80template <class T = OPimRecord >
66class ORecordList { 81class ORecordList {
67public: 82public:
68 typedef OTemplateBase<T> Base; 83 typedef OTemplateBase<T> Base;
69 typedef ORecordListIterator<T> Iterator; 84 typedef ORecordListIterator<T> Iterator;
70 85
71 /** 86 /**
72 * c'tor 87 * c'tor
73 */ 88 */
74 ORecordList () { 89 ORecordList () {
75 } 90 }
76 ORecordList( const QArray<int>& ids, 91 ORecordList( const QArray<int>& ids,
77 const Base* ); 92 const Base* );
78 ~ORecordList(); 93 ~ORecordList();
79 94
80 /** 95 /**
81 * the first iterator 96 * the first iterator
82 */ 97 */
83 Iterator begin(); 98 Iterator begin();
84 99
85 /** 100 /**
86 * the end 101 * the end
87 */ 102 */
88 Iterator end(); 103 Iterator end();
104
105 /**
106 * the number of items in the list
107 */
108 uint count()const;
109
110 // FIXME implemenent remove
89 /* 111 /*
90 ConstIterator begin()const; 112 ConstIterator begin()const;
91 ConstIterator end()const; 113 ConstIterator end()const;
92 */ 114 */
93private: 115private:
94 QArray<int> m_ids; 116 QArray<int> m_ids;
95 const Base* m_acc; 117 const Base* m_acc;
96}; 118};
97 119
98/* ok now implement it */ 120/* ok now implement it */
99template <class T> 121template <class T>
100ORecordListIterator<T>::ORecordListIterator() { 122ORecordListIterator<T>::ORecordListIterator() {
101 m_current = 0; 123 m_current = 0;
102 m_temp = 0l; 124 m_temp = 0l;
103 m_end = true; 125 m_end = true;
104 m_record = T(); 126 m_record = T();
105} 127}
106template <class T> 128template <class T>
107ORecordListIterator<T>::~ORecordListIterator() { 129ORecordListIterator<T>::~ORecordListIterator() {
108/* nothing to delete */ 130/* nothing to delete */
109} 131}
110 132
111template <class T> 133template <class T>
112ORecordListIterator<T>::ORecordListIterator( const ORecordListIterator<T>& it) { 134ORecordListIterator<T>::ORecordListIterator( const ORecordListIterator<T>& it) {
113// qWarning("ORecordListIterator copy c'tor"); 135// qWarning("ORecordListIterator copy c'tor");
114 m_uids = it.m_uids; 136 m_uids = it.m_uids;
115 m_current = it.m_current; 137 m_current = it.m_current;
116 m_temp = it.m_temp; 138 m_temp = it.m_temp;
117 m_end = it.m_end; 139 m_end = it.m_end;
118 m_record = it.m_record; 140 m_record = it.m_record;
119} 141}
120 142
121template <class T> 143template <class T>
122ORecordListIterator<T> &ORecordListIterator<T>::operator=( const ORecordListIterator<T>& it) { 144ORecordListIterator<T> &ORecordListIterator<T>::operator=( const ORecordListIterator<T>& it) {
123 m_uids = it.m_uids; 145 m_uids = it.m_uids;
124 m_current = it.m_current; 146 m_current = it.m_current;
125 m_temp = it.m_temp; 147 m_temp = it.m_temp;
126 m_end = it.m_end; 148 m_end = it.m_end;
127// m_record = it.m_record; 149// m_record = it.m_record;
128 150
129 return *this; 151 return *this;
130} 152}
131 153
132template <class T> 154template <class T>
133T ORecordListIterator<T>::operator*() { 155T ORecordListIterator<T>::operator*() {
134// qWarning("operator* %d %d", m_current, m_uids[m_current] ); 156// qWarning("operator* %d %d", m_current, m_uids[m_current] );
135 if (!m_end ) 157 if (!m_end )
136 m_record = m_temp->find( m_uids[m_current] ); 158 /* FIXME
159 * until the cache is in place
160 * we do the uid match uid check
161 */
162 if(m_record.uid() != m_uids[m_current] )
163 m_record = m_temp->find( m_uids[m_current] );
137 else 164 else
138 m_record = T(); 165 m_record = T();
139 166
140 return m_record; 167 return m_record;
141} 168}
142 169
143template <class T> 170template <class T>
144ORecordListIterator<T> &ORecordListIterator<T>::operator++() { 171ORecordListIterator<T> &ORecordListIterator<T>::operator++() {
145 if (m_current < (int)m_uids.count() ) { 172 if (m_current < m_uids.count() ) {
146 m_end = false; 173 m_end = false;
147 ++m_current; 174 ++m_current;
148 }else 175 }else
149 m_end = true; 176 m_end = true;
150 177
151 return *this; 178 return *this;
152} 179}
153template <class T> 180template <class T>
154ORecordListIterator<T> &ORecordListIterator<T>::operator--() { 181ORecordListIterator<T> &ORecordListIterator<T>::operator--() {
155 if ( m_current > 0 ) { 182 if ( m_current > 0 ) {
156 --m_current; 183 --m_current;
157 m_end = false; 184 m_end = false;
158 } else 185 } else
159 m_end = true; 186 m_end = true;
160 187
161 return *this; 188 return *this;
162} 189}
163 190
164template <class T> 191template <class T>
165bool ORecordListIterator<T>::operator==( const ORecordListIterator<T>& it ) { 192bool ORecordListIterator<T>::operator==( const ORecordListIterator<T>& it ) {
166 193
167 /* if both are at we're the same.... */ 194 /* if both are at we're the same.... */
168 if ( m_end == it.m_end ) return true; 195 if ( m_end == it.m_end ) return true;
169 196
170 if ( m_uids != it.m_uids ) return false; 197 if ( m_uids != it.m_uids ) return false;
171 if ( m_current != it.m_current ) return false; 198 if ( m_current != it.m_current ) return false;
172 if ( m_temp != it.m_temp ) return false; 199 if ( m_temp != it.m_temp ) return false;
173 200
174 return true; 201 return true;
175} 202}
176template <class T> 203template <class T>
177bool ORecordListIterator<T>::operator!=( const ORecordListIterator<T>& it ) { 204bool ORecordListIterator<T>::operator!=( const ORecordListIterator<T>& it ) {
178 return !(*this == it ); 205 return !(*this == it );
179} 206}
180template <class T> 207template <class T>
181ORecordListIterator<T>::ORecordListIterator( const QArray<int> uids, 208ORecordListIterator<T>::ORecordListIterator( const QArray<int> uids,
182 const Base* t ) 209 const Base* t )
183 : m_uids( uids ), m_current( 0 ), m_temp( t ), m_end( false ) 210 : m_uids( uids ), m_current( 0 ), m_temp( t ), m_end( false )
184{ 211{
185} 212}
186 213template <class T>
214uint ORecordListIterator<T>::current()const {
215 return m_current;
216}
217template <class T>
218void ORecordListIterator<T>::setCurrent( uint cur ) {
219 if( cur < m_uids.count() ) {
220 m_end = false;
221 m_current= cur;
222 }
223}
224template <class T>
225uint ORecordListIterator<T>::count()const {
226 return m_uids.count();
227}
187template <class T> 228template <class T>
188ORecordList<T>::ORecordList( const QArray<int>& ids, 229ORecordList<T>::ORecordList( const QArray<int>& ids,
189 const Base* acc ) 230 const Base* acc )
190 : m_ids( ids ), m_acc( acc ) 231 : m_ids( ids ), m_acc( acc )
191{ 232{
192} 233}
193template <class T> 234template <class T>
194ORecordList<T>::~ORecordList() { 235ORecordList<T>::~ORecordList() {
195/* nothing to do here */ 236/* nothing to do here */
196} 237}
197template <class T> 238template <class T>
198ORecordList<T>::Iterator ORecordList<T>::begin() { 239ORecordList<T>::Iterator ORecordList<T>::begin() {
199 Iterator it( m_ids, m_acc ); 240 Iterator it( m_ids, m_acc );
200 return it; 241 return it;
201} 242}
202template <class T> 243template <class T>
203ORecordList<T>::Iterator ORecordList<T>::end() { 244ORecordList<T>::Iterator ORecordList<T>::end() {
204 Iterator it( m_ids, m_acc ); 245 Iterator it( m_ids, m_acc );
205 it.m_end = true; 246 it.m_end = true;
206 it.m_current = m_ids.count(); 247 it.m_current = m_ids.count();
207 248
208 return it; 249 return it;
209} 250}
251template <class T>
252uint ORecordList<T>::count()const {
253return m_ids.count();
254}
210#endif 255#endif