summaryrefslogtreecommitdiff
path: root/libopie/pim/orecordlist.h
Unidiff
Diffstat (limited to 'libopie/pim/orecordlist.h') (more/less context) (ignore whitespace changes)
-rw-r--r--libopie/pim/orecordlist.h139
1 files changed, 127 insertions, 12 deletions
diff --git a/libopie/pim/orecordlist.h b/libopie/pim/orecordlist.h
index c17186f..65c2169 100644
--- a/libopie/pim/orecordlist.h
+++ b/libopie/pim/orecordlist.h
@@ -13,8 +13,9 @@ public:
13 public: 13 public:
14 Iterator() {} 14 Iterator();
15 ~Iterator() {} 15 ~Iterator();
16 Iterator(const Iterator& ) {} 16 Iterator(const Iterator& );
17 Iterator &operator=(const Iterator& ); 17 Iterator &operator=(const Iterator& );
18 T &operator*() {} 18 T &operator*();
19 Iterator &operator++(); 19 Iterator &operator++();
20 Iterator &operator--();
20 21
@@ -23,11 +24,19 @@ public:
23 24
24 } 25 private:
25 ORecordList( const QArray<int>& ids, 26 Iterator( const QArray<int>,
26 OPimAccessTemplate<T>* acc ) 27 OPimAccessTemplate<T>* );
27 : m_ids(ids ), m_acc( acc ) {
28 28
29 } 29 QArray<int> m_uids;
30 ~ORecordList() { 30 int m_current;
31 OPimAccessTemplate* m_temp;
32 bool m_end : 1;
33 T m_record;
31 34
32 } 35 /* d pointer for future versions */
36 class IteratorPrivate;
37 IteratorPrivate *d;
38 };
39 ORecordList( const QArray<int>& ids,
40 OPimAccessTemplate<T>* acc );
41 ~ORecordList();
33 Iterator begin(); 42 Iterator begin();
@@ -39,3 +48,3 @@ public:
39private: 48private:
40 QArray<int> ids; 49 QArray<int> m_ids;
41 OPimAccessTemplate<T>* m_acc; 50 OPimAccessTemplate<T>* m_acc;
@@ -43,2 +52,108 @@ private:
43 52
53/* ok now implement it */
54template <class T= OPimRecord>
55ORecordList<T>::Iterator::Iterator() {
56 m_current = 0;
57 m_temp = 0l;
58 m_end = true;
59}
60template <class T= OPimRecord>
61ORecordList<T>::Iterator::~Iterator() {
62/* nothing to delete */
63}
64
65template <class T = OPimRecord>
66ORecordList<T>::Iterator::Iterator( const ORecordList<T>::Iterator& it) {
67 m_uids = it.m_uids;
68 m_current = it.m_current;
69 m_temp = it.m_temp;
70 m_end = it.m_end;
71 m_record = it.m_record;
72}
73
74template <class T = OPimRecord>
75ORecordList<T>::Iterator &ORecordList::Iterator::operator=( const ORecordList<T>::Iterator& it) {
76 m_uids = it.m_uids;
77 m_current = it.m_current;
78 m_temp = it.m_temp;
79 m_end = it.m_end;
80 m_record = it.m_record;
81
82 return *this;
83}
84
85template <class T = OPimRecord>
86T &ORecordList<T>::Iterator::operator*() {
87 if (!m_end )
88 m_record = m_temp->find( m_uids[m_current] );
89 else
90 m_record = T;
91
92 return m_record;
93}
94
95template <class T = OPimRecord>
96ORecordList<T>::Iterator &ORecordList<T>::Iterator::operator++() {
97 if (m_current < m_uids.count() ) {
98 m_end = false;
99 ++m_current;
100 }else
101 m_end = true;
102
103 return *this;
104}
105template <class T = OPimRecord>
106ORecordList<T>::Iterator &ORecordList<T>::Iterator::operator--() {
107 if ( m_current > 0 ) {
108 --m_current;
109 m_end = false;
110 } else
111 m_end = true;
112
113 return *this;
114}
115
116template <class T = OPimRecord>
117bool ORecordList<T>::Iterator::operator==( const ORecordList<T>::Iterator& it ) {
118
119 /* if both are at we're the same.... */
120 if ( m_end == it.m_end ) return true;
121
122 if ( m_uids != it.m_uids ) return false;
123 if ( m_current != it.m_current ) return false;
124 if ( m_temp != it.m_temp ) return false;
125
126 return true;
127}
128template <class T = ORecordList>
129bool ORecordList<T>::Iterator::operator!=( const ORecordList<T>::Iterator it ) {
130 return !(*this == it );
131}
132template <class T = ORecordList>
133ORecordList<T>::Iterator::Iterator( const QArray<int> uids,
134 OPimAccessTemplate<T>* t )
135 : m_uids( uids ), m_current( 0 ), m_temp( t ), m_end( false )
136{
137}
138template <class T = ORecordList>
139ORecordList<T>::ORecordList( const QArray<int>& ids,
140 OPimAccessTemplate<T>* acc )
141 : m_ids( ids ), m_acc( acc )
142{
143}
144template <class T = ORecordList>
145ORecordList<T>::~ORecordList() {
146/* nothing to do here */
147}
148template <class T = ORecordList>
149ORecordList<T>::Iterator ORecordList<T>::begin() {
150 Iterator it( m_ids, m_acc );
151 return it;
152}
153template <class T = ORecordList>
154ORecordList<T>::Iterator ORecordList<T>::end() {
155 Iterator it( m_ids, m_acc );
156 it.m_end = true;
157 it.m_current = m_ids.count();
158}
44#endif 159#endif