diff -r 5b6f26637ad3 -r f4a778e096c2 phonebookengines/VirtualPhonebook/VPbkEng/src/TVPbkContactStoreUriPtr.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phonebookengines/VirtualPhonebook/VPbkEng/src/TVPbkContactStoreUriPtr.cpp Wed Sep 01 12:29:52 2010 +0100 @@ -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 +#include + +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