phonebookengines/VirtualPhonebook/VPbkEng/src/CVPbkFieldTypeRefsList.cpp
changeset 0 e686773b3f54
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookengines/VirtualPhonebook/VPbkEng/src/CVPbkFieldTypeRefsList.cpp	Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,206 @@
+/*
+* Copyright (c) 2005-2007 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  An list for fieldtype references. Implements 
+*                MVPbkFieldTypeList so can be used e.g as parameter to Find
+*                operation.
+*
+*/
+
+
+// INCLUDES
+#include "CVPbkFieldTypeRefsList.h"
+#include <barsread.h>
+#include "TVPbkFieldVersitProperty.h"
+
+
+// --------------------------------------------------------------------------
+// CVPbkFieldTypeRefsList::CVPbkFieldTypeRefsList
+// --------------------------------------------------------------------------
+//
+inline CVPbkFieldTypeRefsList::CVPbkFieldTypeRefsList()
+    {
+    }
+
+// --------------------------------------------------------------------------
+// CVPbkFieldTypeRefsList::~CVPbkFieldTypeRefsList
+// --------------------------------------------------------------------------
+//
+CVPbkFieldTypeRefsList::~CVPbkFieldTypeRefsList()
+    {
+    iFieldTypes.Reset();
+    }
+
+// --------------------------------------------------------------------------
+// CVPbkFieldTypeRefsList::NewL
+// --------------------------------------------------------------------------
+//
+EXPORT_C CVPbkFieldTypeRefsList* CVPbkFieldTypeRefsList::NewL()
+    {
+    CVPbkFieldTypeRefsList* self = new(ELeave) CVPbkFieldTypeRefsList;
+    return self;
+    }
+
+// --------------------------------------------------------------------------
+// CVPbkFieldTypeRefsList::AppendL
+// --------------------------------------------------------------------------
+//
+EXPORT_C void CVPbkFieldTypeRefsList::AppendL(const MVPbkFieldType& aFieldType)
+    {
+    const TInt matchPriorities = aFieldType.VersitProperties().Count();
+    if (matchPriorities > iMaxMatchPriority)
+        {
+        iMaxMatchPriority = matchPriorities - 1;
+        }
+
+    User::LeaveIfError(iFieldTypes.Append(&aFieldType));
+    }
+
+// --------------------------------------------------------------------------
+// CVPbkFieldTypeRefsList::Remove
+// --------------------------------------------------------------------------
+//
+EXPORT_C void CVPbkFieldTypeRefsList::Remove(const MVPbkFieldType& aFieldType)
+    {
+    TInt index = iFieldTypes.Find(&aFieldType);
+    if (index != KErrNotFound)
+        {
+        iFieldTypes.Remove(index);
+        iMaxMatchPriority = 0;
+        TInt fieldTypeCount = iFieldTypes.Count();
+        for (TInt i = 0; i < fieldTypeCount; ++i)
+            {
+            const TInt matchPriorities = FieldTypeAt(i).VersitProperties().Count();
+            if (matchPriorities > iMaxMatchPriority)
+                {
+                iMaxMatchPriority = matchPriorities - 1;
+                }
+            }
+        }
+    }
+
+// --------------------------------------------------------------------------
+// CVPbkFieldTypeRefsList::Reset
+// --------------------------------------------------------------------------
+//
+EXPORT_C void CVPbkFieldTypeRefsList::Reset()
+    {
+    // Reset but don't destroy
+    iFieldTypes.Reset();
+    }
+    
+// --------------------------------------------------------------------------
+// CVPbkFieldTypeRefsList::FieldTypeCount
+// --------------------------------------------------------------------------
+//
+TInt CVPbkFieldTypeRefsList::FieldTypeCount() const
+    {
+    return iFieldTypes.Count();
+    }
+
+// --------------------------------------------------------------------------
+// CVPbkFieldTypeRefsList::FieldTypeAt
+// --------------------------------------------------------------------------
+//
+const MVPbkFieldType& CVPbkFieldTypeRefsList::FieldTypeAt(TInt aIndex) const
+    {
+    return *iFieldTypes[aIndex];
+    }
+
+// --------------------------------------------------------------------------
+// CVPbkFieldTypeRefsList::ContainsSame
+// --------------------------------------------------------------------------
+//
+TBool CVPbkFieldTypeRefsList::ContainsSame(const MVPbkFieldType& aFieldType) const
+    {
+    const TInt count = iFieldTypes.Count();
+    for (TInt i=0; i < count; ++i)
+        {
+        if (iFieldTypes[i]->IsSame(aFieldType))
+            {
+            return ETrue;
+            }
+        }
+    return EFalse;
+    }
+
+// --------------------------------------------------------------------------
+// CVPbkFieldTypeRefsList::MaxMatchPriority
+// --------------------------------------------------------------------------
+//
+TInt CVPbkFieldTypeRefsList::MaxMatchPriority() const
+    {
+    return iMaxMatchPriority;
+    }
+
+// --------------------------------------------------------------------------
+// CVPbkFieldTypeRefsList::FindMatch
+// --------------------------------------------------------------------------
+//
+const MVPbkFieldType* CVPbkFieldTypeRefsList::FindMatch
+        (const TVPbkFieldVersitProperty& aMatchProperty,
+        TInt aMatchPriority) const
+    {
+    const TInt count = iFieldTypes.Count();
+    for (TInt i=0; i < count; ++i)
+        {
+        const MVPbkFieldType& ft = *iFieldTypes[i];
+        if (ft.Matches(aMatchProperty, aMatchPriority))
+            {
+            return &ft;
+            }
+        }
+    return NULL;
+    }
+
+// --------------------------------------------------------------------------
+// CVPbkFieldTypeRefsList::FindMatch
+// --------------------------------------------------------------------------
+//
+const MVPbkFieldType* CVPbkFieldTypeRefsList::FindMatch
+        (TVPbkNonVersitFieldType aNonVersitType) const
+    {
+    const TInt count = iFieldTypes.Count();
+    for (TInt i=0; i < count; ++i)
+        {
+        const MVPbkFieldType& ft = *iFieldTypes[i];
+        if (ft.NonVersitType() == aNonVersitType)
+            {
+            return &ft;
+            }
+        }
+    return NULL;
+    }
+
+// --------------------------------------------------------------------------
+// CVPbkFieldTypeRefsList::Find
+// --------------------------------------------------------------------------
+//
+const MVPbkFieldType* CVPbkFieldTypeRefsList::Find(
+        TInt aFieldTypeResId) const
+    {
+    const MVPbkFieldType* fieldType = NULL;
+    const TInt count = iFieldTypes.Count();
+    for (TInt i = 0; i < count; ++i)
+        {
+        if (iFieldTypes[i]->FieldTypeResId() == aFieldTypeResId)
+            {
+            fieldType = iFieldTypes[i];
+            break;
+            }
+        }
+    return fieldType;
+    }
+
+// end of file
+