phonebookengines/VirtualPhonebook/VPbkEng/src/TVPbkContactStoreUriPtr.cpp
changeset 0 e686773b3f54
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookengines/VirtualPhonebook/VPbkEng/src/TVPbkContactStoreUriPtr.cpp	Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,148 @@
+/*
+* 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:  A class for using contact store URIs
+*
+*/
+
+
+// INCLUDES
+#include <TVPbkContactStoreUriPtr.h>
+#include <s32strm.h>
+
+namespace
+    {
+    _LIT(KDomainStoreSeparator, "://");  
+    _LIT(KDriveSeparator, ":");  
+    }
+
+// TVPbkContactStoreUriPtr implementation
+EXPORT_C TVPbkContactStoreUriPtr::TVPbkContactStoreUriPtr(
+        const TDesC& aStoreUri)
+    {
+    iUriBufferPointer.Set(aStoreUri);
+    }
+
+EXPORT_C TVPbkContactStoreUriPtr::TVPbkContactStoreUriPtr()
+    {
+    }
+
+EXPORT_C const TDesC& TVPbkContactStoreUriPtr::UriDes() const
+    {
+    return iUriBufferPointer;
+    }
+
+EXPORT_C TInt TVPbkContactStoreUriPtr::Compare(
+        const TVPbkContactStoreUriPtr& aUri,
+        TVPbkContactStoreUriComponent aComponent) const
+    {
+    const TVPbkContactStoreUriPtr uri(iUriBufferPointer);
+    return Compare(uri.Component(aComponent), aUri.Component(aComponent));
+    }
+
+EXPORT_C TInt TVPbkContactStoreUriPtr::Compare(
+        const TDesC& aUriComponent, 
+        TVPbkContactStoreUriComponent aComponent) const
+    {
+    const TVPbkContactStoreUriPtr uri(iUriBufferPointer);
+    return Compare(uri.Component(aComponent), aUriComponent);
+    }
+
+    TInt TVPbkContactStoreUriPtr::Compare(
+        const TDesC& aLhsUri,
+        const TDesC& aRhsUri) const
+    {
+    return aLhsUri.Compare(aRhsUri);
+    }
+
+EXPORT_C const TPtrC TVPbkContactStoreUriPtr::Component(
+        TVPbkContactStoreUriComponent aComponent) const
+    {
+    TPtrC component; 
+    switch(aComponent)
+        {
+        case EContactStoreUriAllComponents:
+            {
+            component.Set(iUriBufferPointer);
+            }
+            break;
+        case EContactStoreUriStoreType:
+            {
+            const TInt offset = iUriBufferPointer.Find(KDomainStoreSeparator);
+            if (offset != KErrNotFound)
+                {
+                component.Set(iUriBufferPointer.Left(offset));
+                }
+            }
+            break;
+        case EContactStoreUriStoreDrive:
+            {
+            const TPtrC nonDomain = iUriBufferPointer.Right(
+                iUriBufferPointer.Length()-(iUriBufferPointer.Find(KDomainStoreSeparator)+
+                    KDomainStoreSeparator().Length()));
+            const TInt offset = nonDomain.Locate( KDriveSeparator()[0] );
+            if (offset == KErrNotFound)
+                {
+                component.Set(KNullDesC);
+                }
+            else
+                {
+                component.Set(nonDomain.Left(offset));
+                }
+            }
+            break;
+        case EContactStoreUriStoreLocation:
+            {
+            TInt offset = iUriBufferPointer.Find(KDomainStoreSeparator);
+            if (offset != KErrNotFound)
+                {
+                offset += KDomainStoreSeparator().Length();
+                component.Set(iUriBufferPointer.Mid(offset));
+                }
+            }
+            break;
+        }
+    return component;
+    }
+
+EXPORT_C void TVPbkContactStoreUriPtr::Set(const TVPbkContactStoreUriPtr& aUri)
+    {
+    iUriBufferPointer.Set(aUri.UriDes());
+    }
+
+EXPORT_C TInt TVPbkContactStoreUriPtr::Length() const
+    {
+    return iUriBufferPointer.Length();
+    }
+
+// --------------------------------------------------------------------------
+// TVPbkContactStoreUriPtr::ExternalizeL
+// TVPbkContactStoreUriPtr pack:
+//
+// URILength = TInt16
+// URIDescriptor= char*
+// --------------------------------------------------------------------------
+//
+EXPORT_C void TVPbkContactStoreUriPtr::ExternalizeL(RWriteStream& aStream) const
+    {
+    aStream.WriteInt16L(iUriBufferPointer.Length()); // URI length
+    aStream.WriteL(iUriBufferPointer, iUriBufferPointer.Length()); // URI descriptor
+    }
+
+EXPORT_C TInt TVPbkContactStoreUriPtr::ExternalizedSize() const
+    {
+    // Reserve space for length information, 
+    return sizeof(TInt16) + iUriBufferPointer.Size();
+    }
+
+// End of file