summaryrefslogtreecommitdiff
path: root/libopie2/opiepim/orecordlist.h
Unidiff
Diffstat (limited to 'libopie2/opiepim/orecordlist.h') (more/less context) (ignore whitespace changes)
-rw-r--r--libopie2/opiepim/orecordlist.h12
1 files changed, 9 insertions, 3 deletions
diff --git a/libopie2/opiepim/orecordlist.h b/libopie2/opiepim/orecordlist.h
index edcd729..5211f57 100644
--- a/libopie2/opiepim/orecordlist.h
+++ b/libopie2/opiepim/orecordlist.h
@@ -1,21 +1,22 @@
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
10class ORecordListIteratorPrivate;
10/** 11/**
11 * Our List Iterator 12 * Our List Iterator
12 * it behaves like STL or Qt 13 * it behaves like STL or Qt
13 * 14 *
14 * for(it = list.begin(); it != list.end(); ++it ) 15 * for(it = list.begin(); it != list.end(); ++it )
15 * doSomeCoolStuff( (*it) ); 16 * doSomeCoolStuff( (*it) );
16 */ 17 */
17template <class T> class ORecordList; 18template <class T> class ORecordList;
18template <class T = OPimRecord> 19template <class T = OPimRecord>
19class ORecordListIterator { 20class ORecordListIterator {
20 friend class ORecordList<T>; 21 friend class ORecordList<T>;
21public: 22public:
@@ -62,27 +63,28 @@ public:
62 */ 63 */
63 void setCurrent( uint cur ); 64 void setCurrent( uint cur );
64 65
65private: 66private:
66 QArray<int> m_uids; 67 QArray<int> m_uids;
67 uint m_current; 68 uint m_current;
68 const Base* m_temp; 69 const Base* m_temp;
69 bool m_end : 1; 70 bool m_end : 1;
70 T m_record; 71 T m_record;
71 bool m_direction :1; 72 bool m_direction :1;
72 73
73 /* d pointer for future versions */ 74 /* d pointer for future versions */
74 class IteratorPrivate; 75 ORecordListIteratorPrivate *d;
75 IteratorPrivate *d;
76}; 76};
77
78class ORecordListPrivate;
77/** 79/**
78 * The recordlist used as a return type 80 * The recordlist used as a return type
79 * from OPimAccessTemplate 81 * from OPimAccessTemplate
80 */ 82 */
81template <class T = OPimRecord > 83template <class T = OPimRecord >
82class ORecordList { 84class ORecordList {
83public: 85public:
84 typedef OTemplateBase<T> Base; 86 typedef OTemplateBase<T> Base;
85 typedef ORecordListIterator<T> Iterator; 87 typedef ORecordListIterator<T> Iterator;
86 88
87 /** 89 /**
88 * c'tor 90 * c'tor
@@ -102,36 +104,37 @@ ORecordList( const QArray<int>& ids,
102 * the end 104 * the end
103 */ 105 */
104 Iterator end(); 106 Iterator end();
105 107
106 /** 108 /**
107 * the number of items in the list 109 * the number of items in the list
108 */ 110 */
109 uint count()const; 111 uint count()const;
110 112
111 T operator[]( uint i ); 113 T operator[]( uint i );
112 int uidAt(uint i ); 114 int uidAt(uint i );
113 115
114 /** 116 /**
115 * Remove the contact with given uid 117 * Remove the contact with given uid
116 */ 118 */
117 bool remove( int uid ); 119 bool remove( int uid );
118 120
119 /* 121 /*
120 ConstIterator begin()const; 122 ConstIterator begin()const;
121 ConstIterator end()const; 123 ConstIterator end()const;
122 */ 124 */
123private: 125private:
124 QArray<int> m_ids; 126 QArray<int> m_ids;
125 const Base* m_acc; 127 const Base* m_acc;
128 ORecordListPrivate *d;
126}; 129};
127 130
128/* ok now implement it */ 131/* ok now implement it */
129template <class T> 132template <class T>
130ORecordListIterator<T>::ORecordListIterator() { 133ORecordListIterator<T>::ORecordListIterator() {
131 m_current = 0; 134 m_current = 0;
132 m_temp = 0l; 135 m_temp = 0l;
133 m_end = true; 136 m_end = true;
134 m_record = T(); 137 m_record = T();
135 /* forward */ 138 /* forward */
136 m_direction = TRUE; 139 m_direction = TRUE;
137} 140}
@@ -211,24 +214,27 @@ bool ORecordListIterator<T>::operator==( const ORecordListIterator<T>& it ) {
211 return true; 214 return true;
212} 215}
213template <class T> 216template <class T>
214bool ORecordListIterator<T>::operator!=( const ORecordListIterator<T>& it ) { 217bool ORecordListIterator<T>::operator!=( const ORecordListIterator<T>& it ) {
215 return !(*this == it ); 218 return !(*this == it );
216} 219}
217template <class T> 220template <class T>
218ORecordListIterator<T>::ORecordListIterator( const QArray<int> uids, 221ORecordListIterator<T>::ORecordListIterator( const QArray<int> uids,
219 const Base* t ) 222 const Base* t )
220 : m_uids( uids ), m_current( 0 ), m_temp( t ), m_end( false ), 223 : m_uids( uids ), m_current( 0 ), m_temp( t ), m_end( false ),
221 m_direction( false ) 224 m_direction( false )
222{ 225{
226 /* if the list is empty we're already at the end of the list */
227 if (uids.count() == 0 )
228 m_end = true;
223} 229}
224template <class T> 230template <class T>
225uint ORecordListIterator<T>::current()const { 231uint ORecordListIterator<T>::current()const {
226 return m_current; 232 return m_current;
227} 233}
228template <class T> 234template <class T>
229void ORecordListIterator<T>::setCurrent( uint cur ) { 235void ORecordListIterator<T>::setCurrent( uint cur ) {
230 if( cur < m_uids.count() ) { 236 if( cur < m_uids.count() ) {
231 m_end = false; 237 m_end = false;
232 m_current= cur; 238 m_current= cur;
233 } 239 }
234} 240}