-rw-r--r-- | libopie/pim/orecordlist.h | 34 |
1 files changed, 31 insertions, 3 deletions
diff --git a/libopie/pim/orecordlist.h b/libopie/pim/orecordlist.h index e377447..2f4a5d3 100644 --- a/libopie/pim/orecordlist.h +++ b/libopie/pim/orecordlist.h | |||
@@ -80,46 +80,51 @@ private: | |||
80 | */ | 80 | */ |
81 | template <class T = OPimRecord > | 81 | template <class T = OPimRecord > |
82 | class ORecordList { | 82 | class ORecordList { |
83 | public: | 83 | public: |
84 | typedef OTemplateBase<T> Base; | 84 | typedef OTemplateBase<T> Base; |
85 | typedef ORecordListIterator<T> Iterator; | 85 | typedef ORecordListIterator<T> Iterator; |
86 | 86 | ||
87 | /** | 87 | /** |
88 | * c'tor | 88 | * c'tor |
89 | */ | 89 | */ |
90 | ORecordList () { | 90 | ORecordList () { |
91 | } | 91 | } |
92 | ORecordList( const QArray<int>& ids, | 92 | ORecordList( const QArray<int>& ids, |
93 | const Base* ); | 93 | const Base* ); |
94 | ~ORecordList(); | 94 | ~ORecordList(); |
95 | 95 | ||
96 | /** | 96 | /** |
97 | * the first iterator | 97 | * the first iterator |
98 | */ | 98 | */ |
99 | Iterator begin(); | 99 | Iterator begin(); |
100 | 100 | ||
101 | /** | 101 | /** |
102 | * the end | 102 | * the end |
103 | */ | 103 | */ |
104 | Iterator end(); | 104 | Iterator end(); |
105 | 105 | ||
106 | /** | 106 | /** |
107 | * the number of items in the list | 107 | * the number of items in the list |
108 | */ | 108 | */ |
109 | uint count()const; | 109 | uint count()const; |
110 | 110 | ||
111 | T operator[]( uint i ); | 111 | T operator[]( uint i ); |
112 | int uidAt(uint i ); | 112 | int uidAt(uint i ); |
113 | // FIXME implemenent remove | 113 | |
114 | /** | ||
115 | * Remove the contact with given uid | ||
116 | */ | ||
117 | bool remove( int uid ); | ||
118 | |||
114 | /* | 119 | /* |
115 | ConstIterator begin()const; | 120 | ConstIterator begin()const; |
116 | ConstIterator end()const; | 121 | ConstIterator end()const; |
117 | */ | 122 | */ |
118 | private: | 123 | private: |
119 | QArray<int> m_ids; | 124 | QArray<int> m_ids; |
120 | const Base* m_acc; | 125 | const Base* m_acc; |
121 | }; | 126 | }; |
122 | 127 | ||
123 | /* ok now implement it */ | 128 | /* ok now implement it */ |
124 | template <class T> | 129 | template <class T> |
125 | ORecordListIterator<T>::ORecordListIterator() { | 130 | ORecordListIterator<T>::ORecordListIterator() { |
@@ -150,25 +155,25 @@ template <class T> | |||
150 | ORecordListIterator<T> &ORecordListIterator<T>::operator=( const ORecordListIterator<T>& it) { | 155 | ORecordListIterator<T> &ORecordListIterator<T>::operator=( const ORecordListIterator<T>& it) { |
151 | m_uids = it.m_uids; | 156 | m_uids = it.m_uids; |
152 | m_current = it.m_current; | 157 | m_current = it.m_current; |
153 | m_temp = it.m_temp; | 158 | m_temp = it.m_temp; |
154 | m_end = it.m_end; | 159 | m_end = it.m_end; |
155 | m_record = it.m_record; | 160 | m_record = it.m_record; |
156 | 161 | ||
157 | return *this; | 162 | return *this; |
158 | } | 163 | } |
159 | 164 | ||
160 | template <class T> | 165 | template <class T> |
161 | T ORecordListIterator<T>::operator*() { | 166 | T ORecordListIterator<T>::operator*() { |
162 | qWarning("operator* %d %d", m_current, m_uids[m_current] ); | 167 | //qWarning("operator* %d %d", m_current, m_uids[m_current] ); |
163 | if (!m_end ) | 168 | if (!m_end ) |
164 | m_record = m_temp->find( m_uids[m_current], m_uids, m_current, | 169 | m_record = m_temp->find( m_uids[m_current], m_uids, m_current, |
165 | m_direction ? Base::Forward : | 170 | m_direction ? Base::Forward : |
166 | Base::Reverse ); | 171 | Base::Reverse ); |
167 | else | 172 | else |
168 | m_record = T(); | 173 | m_record = T(); |
169 | 174 | ||
170 | return m_record; | 175 | return m_record; |
171 | } | 176 | } |
172 | 177 | ||
173 | template <class T> | 178 | template <class T> |
174 | ORecordListIterator<T> &ORecordListIterator<T>::operator++() { | 179 | ORecordListIterator<T> &ORecordListIterator<T>::operator++() { |
@@ -260,13 +265,36 @@ return m_ids.count(); | |||
260 | } | 265 | } |
261 | template <class T> | 266 | template <class T> |
262 | T ORecordList<T>::operator[]( uint i ) { | 267 | T ORecordList<T>::operator[]( uint i ) { |
263 | if ( i < 0 || (i+1) > m_ids.count() ) | 268 | if ( i < 0 || (i+1) > m_ids.count() ) |
264 | return T(); | 269 | return T(); |
265 | /* forward */ | 270 | /* forward */ |
266 | return m_acc->find( m_ids[i], m_ids, i ); | 271 | return m_acc->find( m_ids[i], m_ids, i ); |
267 | } | 272 | } |
268 | template <class T> | 273 | template <class T> |
269 | int ORecordList<T>::uidAt( uint i ) { | 274 | int ORecordList<T>::uidAt( uint i ) { |
270 | return m_ids[i]; | 275 | return m_ids[i]; |
271 | } | 276 | } |
277 | |||
278 | template <class T> | ||
279 | bool ORecordList<T>::remove( int uid ) { | ||
280 | QArray<int> copy( m_ids.count() ); | ||
281 | int counter = 0; | ||
282 | bool ret_val = false; | ||
283 | |||
284 | for (uint i = 0; i < m_ids.count(); i++){ | ||
285 | if ( m_ids[i] != uid ){ | ||
286 | copy[counter++] = m_ids[i]; | ||
287 | |||
288 | }else | ||
289 | ret_val = true; | ||
290 | } | ||
291 | |||
292 | copy.resize( counter ); | ||
293 | m_ids = copy; | ||
294 | |||
295 | |||
296 | return ret_val; | ||
297 | } | ||
298 | |||
299 | |||
272 | #endif | 300 | #endif |