2 * Copyright (c) 2005-2007 Nokia Corporation and/or its subsidiary(-ies).
4 * This component and the accompanying materials are made available
5 * under the terms of "Eclipse Public License v1.0"
6 * which accompanies this distribution, and is available
7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
9 * Initial Contributors:
10 * Nokia Corporation - initial contribution.
14 * Description: Virtual Phonebook contact field iterator interface.
19 #ifndef CVPBKCONTACTFIELDITERATOR_H
20 #define CVPBKCONTACTFIELDITERATOR_H
24 #include <mvpbkstorecontactfield.h>
26 // FORWARD DECLARATIONS
27 class MVPbkStoreContactFieldCollection;
28 class MVPbkBaseContactFieldCollection;
30 class MVPbkFieldTypeList;
31 class MVPbkStoreContactField;
32 class CStoreFieldByTypeIterator;
33 class CBaseFieldByTypeIterator;
34 class CBaseFieldByTypeListIterator;
35 class MVPbkBaseContactField;
38 * Virtual Phonebook contact field iterator interface.
40 class MVPbkBaseContactFieldIterator
42 public: // Construction
46 virtual ~MVPbkBaseContactFieldIterator() { }
50 * Returns the next field, otherwise NULL.
52 * @return The next field, otherwise NULL.
54 virtual const MVPbkBaseContactField* Next() const =0;
57 * Returns ETrue if there exists a next field, else EFalse.
59 virtual TBool HasNext() const =0;
64 * Virtual Phonebook contact field iterator interface.
66 class MVPbkContactFieldIterator : public MVPbkBaseContactFieldIterator
68 public: // Construction
72 virtual ~MVPbkContactFieldIterator() { }
75 // From MVPbkBaseContactFieldIterator (covariant return types))
76 const MVPbkStoreContactField* Next() const =0;
79 * Returns the next field, otherwise NULL.
81 * @return The next field, otherwise NULL. Ownership doesn't change.
83 virtual MVPbkStoreContactField* Next() =0;
87 * Virtual Phonebook contact field type iterator.
88 * Iterates the contact fields according to the field type specified.
90 class CVPbkBaseContactFieldTypeIterator :
92 public MVPbkBaseContactFieldIterator
94 public: // Construction
96 * Constructor for iterating store contact fields.
98 * @param aFieldType Field type which is iterated.
99 * @param aFields Contact fields to iterate.
100 * @return A new instance of this class
102 IMPORT_C static CVPbkBaseContactFieldTypeIterator* NewLC(
103 const MVPbkFieldType& aFieldType,
104 const MVPbkBaseContactFieldCollection& aFields);
109 ~CVPbkBaseContactFieldTypeIterator();
111 public: // from MVPbkContactFieldIterator
112 const MVPbkBaseContactField* Next() const;
113 TBool HasNext() const;
115 private: // implementation
117 const MVPbkFieldType& aFieldType,
118 const MVPbkBaseContactFieldCollection& aFields );
121 /// Own: the iterator implementation
122 CBaseFieldByTypeIterator* iIterator;
126 * Virtual Phonebook contact field type list iterator.
127 * Iterates the contact fields according to the field types specified.
129 class CVPbkBaseContactFieldTypeListIterator :
131 public MVPbkBaseContactFieldIterator
133 public: // Construction
135 * Constructor for iterating store contact fields.
137 * @param aFieldTypeList Field type list which is iterated.
138 * @param aFields Contact fields to iterate.
139 * @return A new instance of this class
141 IMPORT_C static CVPbkBaseContactFieldTypeListIterator* NewLC(
142 const MVPbkFieldTypeList& aFieldTypeList,
143 const MVPbkBaseContactFieldCollection& aFields);
148 ~CVPbkBaseContactFieldTypeListIterator();
150 public: // from MVPbkContactFieldIterator
151 const MVPbkBaseContactField* Next() const;
152 TBool HasNext() const;
154 private: // implementation
156 const MVPbkFieldTypeList& aFieldTypeList,
157 const MVPbkBaseContactFieldCollection& aFields );
160 /// Own: the iterator implementation
161 CBaseFieldByTypeListIterator* iIterator;
165 * Virtual Phonebook contact field type iterator.
166 * Iterates the store contact fields according to the
167 * field type specified.
169 class CVPbkContactFieldTypeIterator :
171 public MVPbkContactFieldIterator
173 public: // Construction
175 * Constructor for iterating store contact fields.
177 * @param aFieldType Field type which is iterated.
178 * @param aFields Contact fields to iterate.
179 * @return A new instance of this class
181 IMPORT_C static CVPbkContactFieldTypeIterator* NewLC(
182 const MVPbkFieldType& aFieldType,
183 MVPbkStoreContactFieldCollection& aFields);
188 ~CVPbkContactFieldTypeIterator();
190 public: // from MVPbkContactFieldIterator
191 const MVPbkStoreContactField* Next() const;
192 TBool HasNext() const;
193 MVPbkStoreContactField* Next();
195 private: // implementation
197 const MVPbkFieldType& aFieldType,
198 MVPbkStoreContactFieldCollection& aStoreFields );
201 /// Own: the iterator implementation
202 CStoreFieldByTypeIterator* iIterator;
205 #endif // CVPBKCONTACTFIELDITERATOR_H