epoc32/include/app/cntitem.h
author William Roberts <williamr@symbian.org>
Wed, 31 Mar 2010 12:33:34 +0100
branchSymbian3
changeset 4 837f303aceeb
parent 3 e1b950c65cb4
permissions -rw-r--r--
Current Symbian^3 public API header files (from PDK 3.0.h)
This is the epoc32/include tree with the "platform" subtrees removed, and
all but a selected few mbg and rsg files removed.
     1 // Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
     2 // All rights reserved.
     3 // This component and the accompanying materials are made available
     4 // under the terms of "Eclipse Public License v1.0"
     5 // which accompanies this distribution, and is available
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
     7 //
     8 // Initial Contributors:
     9 // Nokia Corporation - initial contribution.
    10 //
    11 // Contributors:
    12 //
    13 // Description:
    14 // Persistence layer exports
    15 // 
    16 //
    17 
    18 #if !defined(__CNTITEM_H__)
    19 #define __CNTITEM_H__
    20 
    21 #if !defined(__E32BASE_H__)
    22 #include <e32base.h>
    23 #endif
    24 
    25 #if !defined(__CNTDEF_H__)
    26 #include <cntdef.h>
    27 #endif
    28 
    29 #if !defined(__CNTFIELD_H__)
    30 #include <cntfield.h>
    31 #endif
    32 
    33 #include <cntdb.h>
    34 
    35 /** Maximum length of UID string.
    36 @publishedAll
    37 @released
    38 */
    39 const TInt KUidStringLength =244;
    40 
    41 /** UID string separator character
    42 @publishedAll
    43 @released
    44 */
    45 #define KUidStringSeparator '-'
    46 
    47 #ifndef SYMBIAN_ENABLE_SPLIT_HEADERS
    48 /** Constant used by vCard import/export.
    49 @internalComponent
    50 */
    51 #define KContactMaxFieldNumber 32
    52 #endif
    53 
    54 class CContactItemField;
    55 class CContactItemViewDef;
    56 class CContactItem;
    57 
    58 /** Constant to indicate that all fields in the fieldset should be searched.
    59 @publishedAll
    60 @released
    61 */
    62 const TInt KContactFieldSetSearchAll=-1;
    63 
    64 class CContactItemFieldSet : public CBase
    65 /** A contact item's field set. The field set owns an array of contact item fields
    66 (CContactItemFields). The field set is owned by a contact item, and can be
    67 retrieved using CContactItem::CardFields(). Use functions in class
    68 CContactItem to add and remove fields to/from the field set.
    69 
    70 A field set can contain more than one field of the same type, but this is
    71 not advisable as it may cause problems when synchronising the contacts database.
    72 @publishedAll
    73 @released
    74 */
    75 	{
    76 	friend class CContactItemField;
    77 	friend class CContactDatabase;
    78 	friend class CContactTables;
    79 	friend class RPplContactTable;
    80     friend class TCntPersistenceUtility;
    81 
    82 public:
    83 	IMPORT_C static CContactItemFieldSet* NewL();
    84 	IMPORT_C static CContactItemFieldSet* NewLC();
    85 	IMPORT_C ~CContactItemFieldSet();
    86 	inline const CContactItemField& operator[](TInt aIndex) const;
    87 	inline CContactItemField& operator[](TInt aIndex);
    88 	inline TInt Find(TFieldType aFieldType) const; // will only find the first such occurence
    89 	inline TInt Find(TFieldType aFieldType,TUid aMapping) const;
    90 	IMPORT_C TInt FindNext(TFieldType aFieldType,TInt aStartPos=KContactFieldSetSearchAll) const;
    91 	IMPORT_C TInt FindNext(TFieldType aFieldType,TUid aMapping,TInt aStartPos=KContactFieldSetSearchAll) const;
    92 	inline TInt Count() const;
    93 	inline void Reset();
    94 	IMPORT_C void UpdateFieldL(const CContactItemField& aField, TInt aMatchCount);
    95 	IMPORT_C void UpdateFieldSyncL(const CContactItemField& aField, TInt aMatchCount);
    96 	IMPORT_C CContactItemFieldSet& AddL(CContactItemField& aField);
    97 	IMPORT_C void Remove(TInt aIndex);
    98 	IMPORT_C void InsertL(TInt aIndex,CContactItemField& aField);
    99 	IMPORT_C void Move(TInt aFrom, TInt aTo);
   100 	IMPORT_C TStreamId StoreL(CStreamStore& aStore,RWriteStream& aTextStream,CStreamStore& aBlobStore);
   101 	TStreamId StoreL(CStreamStore& aStore,RWriteStream& aTextStream,CStreamStore& aBlobStore,CContactTables* aTables);
   102 	IMPORT_C void RestoreL(CStreamStore& aStore, TStreamId anId,CStreamStore* aBlobStore,const CContactItemViewDef& aViewDef,RReadStream& aReadStream);
   103 	IMPORT_C void RestoreL(CStreamStore& aStore, TStreamId anId,CStreamStore* aBlobStore,const CContactItemViewDef& aViewDef,const CContactItem* aTemplate, HBufC* aTextBuf);
   104 	TInt FieldText(TFieldType aFieldType, TDes &aText, TInt aStartPosition) const;
   105 	CArrayFix<TFieldHeader>* ConstructFieldHeaderArrayLC(RWriteStream& aTextStream, CStreamStore& aBlobStore);
   106 	TInt FieldTypeCount(const CContactItemFieldSet& aSystemTemplateFields, TInt aStartIndex, const CContactItemField& aField) const;
   107 	TBool ContainsFieldTypeMapping(const CContentType& aBaseFieldContentType, const TFieldType& aContactFieldType) const;
   108 	void ExternalizeL(RWriteStream& aStream) const;
   109 	void InternalizeL(RReadStream& aStream);
   110 
   111 private:
   112 	CContactItemFieldSet();
   113 	void ConstructL();
   114 	void SetFieldId(CContactItemField& aField);
   115 	const CContactItemField* FindById(TInt aId) const;
   116 	IMPORT_C TStreamId StoreL(CStreamStore& aStore,const CContactItem* aTemplate,RWriteStream& aStream,CStreamStore& aBlobStore,CContactTables* aTables);
   117 	void RestoreL(CStreamStore& aStore, TStreamId anId, CStreamStore* aBlobStore,const CContactItemViewDef& aViewDef,const CContactItem* aTemplate,RReadStream& aReadStream,CContactTables* aContactsTable, RArray<TInt>* aEmailIdArray);
   118 	void RestoreAndAddTemplateL(CStreamStore& aStore, TStreamId aId,CStreamStore* aBlobStore,const CContactItemViewDef& aViewDef,const CContactItem* aTemplate, RReadStream& aReadStream,CContactTables* aContactsTable,RArray<TInt>* aEmailIdArray);
   119 	TInt MatchTemplateField(const CContentType& aContentType,TUint aUserFlags,TBool &aExactMatch) const;
   120 	static HBufC* LoadTextStreamLC(RReadStream& aStream);
   121 	void NonZeroFieldText(TFieldType aFieldType, TDes &aText) const;
   122 
   123 private:
   124 	CArrayPtr<CContactItemField>* iFields;
   125 	};
   126 
   127 class CContactDatabase;
   128 class RCntModel;
   129 class CContactItem : public CBase
   130 /** The abstract base class for contact cards, templates and groups. All contact
   131 items are identified by a contact ID, (TContactItemId), have a last modified
   132 date/time and own one or more fields (the field set). Contact items also
   133 have an access count and attributes (e.g. hidden). Note that fields in a contact
   134 item also have attributes. Attribute values specified in the contact item
   135 override those in the contained fields. The access count is a record of the
   136 number of objects referencing a contact item. A contact item cannot be fully
   137 deleted until its access count is zero.
   138 @publishedAll
   139 @released
   140 */
   141 	{
   142 	friend class CContactCardTemplate;
   143 	friend class CContactItemPlusGroup;
   144 	friend class CContactCard;
   145 	friend class CContactTemplate;
   146 	friend class CContactGroup;
   147 	friend class CContactOwnCard;
   148 	friend class CVCardToContactsAppConverter;
   149 	friend class CContactICCEntry;
   150 	friend class RPplContactTable;
   151 	friend class RPplIdentityTable;
   152 	friend class RPplPreferencesTable;
   153 	friend class CPackagerTests; //Comparison test
   154 	friend class CPackagerCntComparator;
   155 	friend class CContactDatabase;
   156 	friend class CPplContactItemManager;
   157 public:
   158 	IMPORT_C ~CContactItem();
   159 	/** Gets the contact item's type.
   160 
   161 	@return The contact item's type. */
   162 	virtual TUid Type() const=0;
   163 	static CContactItem* NewLC(RReadStream& aStream);
   164 	IMPORT_C static CContactItem* NewLC(TUid aType);
   165 	IMPORT_C TContactItemId Id() const;
   166 	IMPORT_C TContactItemId TemplateRefId() const;
   167 	IMPORT_C TTime LastModified() const;
   168 	IMPORT_C void SetLastModified(const TTime& aLastModified);
   169 	IMPORT_C void AddFieldL(CContactItemField& aField);
   170 	IMPORT_C void RemoveField(TInt aFieldPos);
   171 	IMPORT_C void InsertFieldL(CContactItemField& aField,TInt aFieldPos);
   172 	IMPORT_C CContactItemFieldSet& CardFields() const;
   173 	IMPORT_C void SetHidden(TBool aHidden);
   174 	IMPORT_C void SetSystem(TBool aSystem);
   175 	IMPORT_C TBool IsHidden();
   176 	IMPORT_C TBool IsSystem();
   177 	IMPORT_C void UpdateFieldSet(CContactItemFieldSet* aNewFieldSet);
   178 	IMPORT_C void SetDeleted(TBool aDeleted);
   179 	IMPORT_C TBool IsDeleted() const;
   180 	IMPORT_C void SetTemplateRefId(TContactItemId aUid);
   181 	TContactItemId Agent();
   182 	inline TBool IsDeletable();
   183 	inline void IncAccessCount();
   184 	inline void DecAccessCount();
   185 	inline TInt AccessCount() const;
   186 	IMPORT_C void SetUidStringL(TDesC& aString);
   187 	IMPORT_C TPtrC UidStringL(TInt64 aMachineUniqueId) const;
   188 	TStreamId PopulateStoreL(CStreamStore& aStore, CArrayFix<TFieldHeader>& aFieldHeaderArray) const;
   189 	void AddLabelFieldL();
   190 	IMPORT_C void RestoreTemplateFieldsL(const CContactItemFieldSet& aSystemTemplateFields, const CContactItemFieldSet& aTemplateFields, const CContactItemViewDef& aViewDef);
   191 	void ClearFieldContent();
   192 	inline TPtrC Guid();
   193 	virtual void ExternalizeL(RWriteStream& aStream) const;
   194 	virtual void InternalizeL(RReadStream& aStream);
   195 
   196 	IMPORT_C void SetId(TContactItemId aId);
   197 	IMPORT_C TUint32 Attributes() const;
   198 	IMPORT_C void SetAttributes(TUint32 aAttributes);
   199 	IMPORT_C void SetAccessCount(TUint32 aAccessCount);
   200 	IMPORT_C void SetCreationDate(const TTime& aTime);
   201 
   202 public:
   203 	/** Contact item's attribute flags
   204 
   205 	These flags can be used to set the various attributes of a contact item. */
   206 	enum
   207 	{
   208 	/** To set the contact item's system attribute. */
   209 	ESystem=0x01,
   210 	/** To set the contact item's hidden attribute. */
   211 	EHidden=0x02,
   212 	/** To set the contact item's hidden attribute. */
   213 	ECompressedGuid=0x04,
   214 	/** To set the contact item's Is deleted attribute. */
   215 	EDeleted=0x08
   216 	};
   217 
   218 private:
   219 	CContactItem();
   220 	void ConstructL();
   221 	void ConstructL(const CContactItem *aTemplate);
   222 	void MakeUidStringL(TInt64 aMachineUniqueId);
   223 	IMPORT_C void SetHasCompressedGuid(TBool aCompressed);
   224 	TBool GuidIsCompressed() const;
   225 	TInt NumberOfFieldsToStore() const;
   226 
   227 private:
   228 	CContactItemFieldSet* iFieldSet;
   229 	TUint32 iAttributes;
   230 	TContactItemId iId;
   231 	TContactItemId iTemplateRefId;
   232 	TTime iLastModified;
   233 	TTime iCreationDate;
   234 	TUint32 iAccessCount;
   235 	HBufC* iGuid;
   236 	};
   237 
   238 class CContactItemPlusGroup : public CContactItem
   239 /** Abstract base class for CContactGroup, CContactCard and CContactOwnCard.
   240 
   241 The purpose of this class is to avoid duplication of group functionality
   242 in its derived classes.
   243 @publishedAll
   244 @released
   245 */
   246 	{
   247 public:
   248 	IMPORT_C const CContactIdArray* GroupsJoined() const;
   249 	IMPORT_C CContactIdArray* GroupsJoinedLC() const;
   250 protected:
   251 	CContactItemPlusGroup();
   252 	IMPORT_C ~CContactItemPlusGroup();
   253 public:
   254 	virtual void ExternalizeL(RWriteStream& aStream) const;
   255 	virtual void InternalizeL(RReadStream& aStream);
   256 
   257 	IMPORT_C void ResetGroups();
   258 	IMPORT_C void SetGroups(CContactIdArray* aGroups);
   259 
   260 private:
   261 	CContactIdArray* iGroups;
   262 	friend class CContactDatabase;
   263 	friend class RPplLookupGroupsTable;
   264 	friend class RPplGroupMembershipTable;
   265 	};
   266 
   267 class CContactGroup : public CContactItemPlusGroup
   268 /** A contact group.
   269 
   270 A contact group is a contact item which holds a set of associated contact
   271 item IDs. The members of the group may be contact cards, own cards, or even
   272 other groups. The group has a label which identifies the group to users, e.g.
   273 "family", or "colleagues". The type of a contact group is KUidContactGroup,
   274 as returned by Type().
   275 
   276 Objects of this class are constructed using CContactDatabase::CreateContactGroupL()
   277 or CreateContactGroupLC(). These functions create the group, optionally with
   278 a label, add it to the database, and return a pointer to it.
   279 
   280 To create an association between a card and a group, use CContactDatabase::AddContactToGroupL()
   281 and to remove the association, use RemoveContactFromGroupL(). To find out
   282 which groups a card belongs to, use CContactCard::GroupsJoinedLC() or CContactOwnCard::GroupsJoinedLC().
   283 
   284 The function CContactDatabase::GetGroupIdListL() may be used to retrieve a
   285 list of IDs for all groups in the database.
   286 @publishedAll
   287 @released
   288 */
   289 	{
   290 public:
   291 	IMPORT_C static CContactGroup* NewL();
   292 	IMPORT_C static CContactGroup* NewLC();
   293 	IMPORT_C ~CContactGroup();
   294 public: // from CContactItem
   295 	IMPORT_C TUid Type() const;
   296 public:
   297 	// default sorted item array is ascending
   298 	IMPORT_C CContactIdArray* ItemsContainedLC() const;
   299 	IMPORT_C const CContactIdArray* ItemsContained() const;
   300 	IMPORT_C TBool IsSystem() const;
   301 	IMPORT_C void SetSystem(TBool aSystem);
   302 	IMPORT_C TBool ContainsItem(TContactItemId aContactId);
   303 	IMPORT_C void SetGroupLabelL(const TDesC& aLabel);
   304 	IMPORT_C TPtrC GetGroupLabelL();
   305 	IMPORT_C TBool HasItemLabelField();
   306 	IMPORT_C CContactIdArray* GroupsJoinedLC() const;
   307 
   308 	IMPORT_C void AddContactL(TContactItemId aContactId);
   309 	IMPORT_C void RemoveContactL(TContactItemId aContactId);
   310 	virtual void ExternalizeL(RWriteStream& aStream) const;
   311 	virtual void InternalizeL(RReadStream& aStream);
   312 
   313 	IMPORT_C void ResetItems();
   314 	IMPORT_C void SetItems(CContactIdArray* aItems);
   315 
   316 private:
   317 	CContactGroup();
   318 
   319 private:
   320 	CContactIdArray* iItems;
   321 	friend class CContactDatabase;
   322 	friend class RPplGroupMembershipTable;
   323 	};
   324 
   325 class CContactCardTemplate : public CContactItem
   326 /** A contact card template.
   327 
   328 This is a contact item containing a set of fields on which new contact items can
   329 be based. Templates have a label which is a string which identifies the template
   330 to a user. For instance, 'work template' could indicate a template used
   331 to create contact cards in the style of a work colleague. Contact card templates
   332 have a type of KUidContactCardTemplate, as returned by Type().
   333 
   334 Objects of this class cannot be constructed directly because its constructors
   335 are protected. Instead, use either CContactDatabase::CreateContactCardTemplateL()
   336 or CreateContactCardTemplateLC(). These functions create a contact card template,
   337 add it to the database, and return a pointer to it.
   338 
   339 The function CContactDatabase::GetCardTemplateIdListL() gets a list of the
   340 IDs of all contact card templates in the database.
   341 @publishedAll
   342 @released
   343 */
   344 	{
   345 	friend class CContactDatabase;
   346 	friend class CContactTables;
   347 	friend class RPplContactTable;
   348 	friend class CContactItem;
   349 public:
   350 	IMPORT_C void SetTemplateLabelL(const TDesC& aLabel);
   351 	IMPORT_C TPtrC GetTemplateLabelL();
   352 protected:
   353 	IMPORT_C static CContactCardTemplate* NewL();
   354 	IMPORT_C static CContactCardTemplate* NewLC();
   355 	IMPORT_C static CContactCardTemplate* NewL(const CContactItem *aTemplate);
   356 	IMPORT_C static CContactCardTemplate* NewLC(const CContactItem *aTemplate);
   357 	IMPORT_C TBool HasItemLabelField();
   358 
   359 /** Intended usage: Reserved to preserve future BC */
   360 	IMPORT_C void ReservedFunction1();
   361 /** Intended usage: Reserved to preserve future BC */
   362 	IMPORT_C void ReservedFunction2();
   363 
   364 protected: // from CContactItem
   365 	IMPORT_C TUid Type() const;
   366 
   367 private:
   368 	CContactCardTemplate();
   369 	};
   370 
   371 class CContactCard : public CContactItemPlusGroup
   372 /** A contact card.
   373 
   374 Implements the Type() function declared in class CContactItem.
   375 Contact cards may optionally be constructed from a template.
   376 @publishedAll
   377 @released
   378 */
   379 	{
   380 public:
   381 	IMPORT_C ~CContactCard();
   382 	IMPORT_C static CContactCard* NewL();
   383 	IMPORT_C static CContactCard* NewLC();
   384 	IMPORT_C static CContactCard* NewL(const CContactItem *aTemplate);
   385 	IMPORT_C static CContactCard* NewLC(const CContactItem *aTemplate);
   386 public: // from CContactItem
   387 	IMPORT_C TUid Type() const;
   388 public:
   389 	IMPORT_C CContactIdArray* GroupsJoinedLC() const;
   390 private:
   391 	CContactCard();
   392 private:
   393 	friend class CContactDatabase;
   394 	};
   395 
   396 class CContactOwnCard : public CContactItemPlusGroup
   397 /** Own card.
   398 
   399 An own card is a contact card which contains information about the device's
   400 owner. This can be sent to another compatible electronic device as a vCard.
   401 The contact database recognises a single own card, referred to as the
   402 current own card; its ID is returned by CContactDatabase::OwnCardId(). Like
   403 a contact card, an own card can be a member of one or more contact card groups.
   404 The own card type is identified by a UID of KUidContactOwnCard.
   405 
   406 Own cards can be constructed using either CContactDatabase::CreateOwnCardLC()
   407 or CreateOwnCardL(). These functions create an own card, based on the system
   408 template, add it to the database, set it as the database's current own card
   409 and return a pointer to it. To change the database's current own card, use
   410 CContactDatabase::SetOwnCardL().
   411 @publishedAll
   412 @released
   413 */
   414 	{
   415 public:
   416 	IMPORT_C ~CContactOwnCard();
   417 	IMPORT_C static CContactOwnCard* NewL();
   418 	IMPORT_C static CContactOwnCard* NewLC();
   419 	IMPORT_C static CContactOwnCard* NewL(const CContactItem *aTemplate);
   420 	IMPORT_C static CContactOwnCard* NewLC(const CContactItem *aTemplate);
   421 public: // from CContactItem
   422 	IMPORT_C TUid Type() const;
   423 public:
   424 	IMPORT_C CContactIdArray* GroupsJoinedLC() const;
   425 private:
   426 	CContactOwnCard();
   427 private:
   428 	friend class CContactDatabase;
   429 	};
   430 
   431 class CContactTemplate : public CContactItem
   432 /** A contact item template.
   433 
   434 This is a contact item which is used to seed the initial field set for
   435 other contact items.
   436 
   437 Non-system (i.e. user-defined) templates are implemented
   438 by the CContactCardTemplate class. CContactCardTemplate should be
   439 used in preference to CContactTemplate.
   440 @publishedAll
   441 @released
   442 */
   443 	{
   444 public:
   445 	IMPORT_C static CContactTemplate* NewL();
   446 	IMPORT_C static CContactTemplate* NewLC();
   447 	IMPORT_C static CContactTemplate* NewL(const CContactItem *aTemplate);
   448 	IMPORT_C static CContactTemplate* NewLC(const CContactItem *aTemplate);
   449 public: // from CContactItem
   450 	IMPORT_C TUid Type() const;
   451 private:
   452 	CContactTemplate();
   453 	};
   454 
   455 
   456 class CContactICCEntry : public CContactItemPlusGroup
   457 /** A contact ICC entry.
   458 @publishedAll
   459 @released
   460 */
   461 	{
   462 public:
   463 	IMPORT_C ~CContactICCEntry();
   464 	IMPORT_C static CContactICCEntry* NewL(const CContactItem& aTemplate);
   465 	static CContactICCEntry* NewL();
   466 public: //from CContactItem
   467 	TUid Type() const;
   468 private:
   469 	CContactICCEntry();
   470 	};
   471 
   472 
   473 class ContactGuid
   474 /** A globally unique identifier enquiry utility.
   475 
   476 Each contact item has a unique identifier, stored as a descriptor. It is
   477 referred to as the 'UID string'. This is a combination of the unique
   478 identifier of the database in which the contact item was created, the
   479 contact item ID and the date/time of the contact item's creation. ContactGuid
   480 provides a single static exported function to enquire whether an item was
   481 created in a specified database.
   482 @publishedAll
   483 @released
   484 */
   485 	{
   486 public:
   487 	IMPORT_C static TContactItemId IsLocalContactUidString(const TDesC& aString, TInt64 aMachineUniqueId);
   488 	IMPORT_C static TBool GetCreationDate(TDes& aString, TInt64 aMachineUniqueId);
   489 	static HBufC* CreateGuidLC(const TDesC& aCreationDate,TContactItemId aId, TInt64 aMachineUniqueId);
   490 	static HBufC* CreateGuidLC(const TTime& aCreationDate,TContactItemId aId, TInt64 aMachineUniqueId);
   491 	static HBufC* CreateGuidLC(TContactItemId aId, TInt64 aMachineUniqueId);
   492 	};
   493 
   494 inline const CContactItemField& CContactItemFieldSet::operator[](TInt aIndex) const
   495 /** Gets the field located at a specified position in the field set.
   496 
   497 @param aIndex The position of the field in the field set. This is relative to zero.
   498 It must be non-negative and less than the number of objects in the array, otherwise
   499 the operator raises a panic.
   500 
   501 @return A const reference to an element in the array. */
   502 	{ return *(*iFields)[aIndex]; }
   503 
   504 inline CContactItemField& CContactItemFieldSet::operator[](TInt aIndex)
   505 /** Gets the field located at a specified position in the field set.
   506 
   507 @param aIndex The position of the field in the field set. This is relative to zero.
   508 It must be non-negative and less than the number of objects in the array, otherwise
   509 the operator raises a panic.
   510 
   511 @return A non-const reference to an element in the array. */
   512 	{ return *(*iFields)[aIndex]; }
   513 
   514 inline TInt CContactItemFieldSet::Find(TFieldType aFieldType) const
   515 /** Finds the first field in the field set with the specified field type.
   516 
   517 @param aFieldType The field type of interest.
   518 @return If found, the index of the field within the field set, or KErrNotFound
   519 if not found. */
   520 	{ return FindNext(aFieldType,KContactFieldSetSearchAll); }
   521 
   522 inline TInt CContactItemFieldSet::Find(TFieldType aFieldType,TUid aMapping) const
   523 /** Finds the first field in the field set containing both the content type mapping
   524 and the field type specified.
   525 
   526 @param aFieldType The field type of interest.
   527 @param aMapping The content type mapping of interest.
   528 @return If found, the index of the field within the field set, or KErrNotFound
   529 if not found. */
   530 	{ return FindNext(aFieldType,aMapping,KContactFieldSetSearchAll); }
   531 
   532 inline TInt CContactItemFieldSet::Count() const
   533 /** Gets the number of fields in the field set.
   534 
   535 @return The number of fields in the field set. */
   536 	{ return iFields->Count(); }
   537 
   538 inline void CContactItemFieldSet::Reset()
   539 /** Deletes all fields in the field set. */
   540 	{ iFields->ResetAndDestroy(); }
   541 
   542 inline TBool CContactItem::IsDeletable()
   543 /** Tests whether the contact item is deletable.
   544 
   545 This is true if the item's access count is zero.
   546 
   547 @return ETrue if deletable, EFalse if not deletable. */
   548 	{return (iAccessCount == 0);}
   549 
   550 inline void CContactItem::IncAccessCount()
   551 /** Increments the contact item's access count. */
   552 	{iAccessCount++;}
   553 
   554 inline void CContactItem::DecAccessCount()
   555 /** Decrements the contact item's access count. */
   556 	{if(iAccessCount) iAccessCount--;}
   557 
   558 inline TInt CContactItem::AccessCount() const
   559 /** Gets the contact item's access count.
   560 
   561 @return The item's access count. */
   562 	{return(iAccessCount);}
   563 
   564 inline TPtrC CContactItem::Guid()
   565 /** Accessor function for Contact Guid.
   566  * This is used to cache contact items that are added during a sync.
   567  @return Guid    */
   568  { return iGuid ? *iGuid : TPtrC(KNullDesC); }
   569 
   570 #endif