--- /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