diff -r 6ca72c0fe49a -r a941bc465d9f PECengine/ListLibrary2/AuthSrc/CPEngAuthorizationItem.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/PECengine/ListLibrary2/AuthSrc/CPEngAuthorizationItem.cpp Wed Sep 01 12:31:13 2010 +0100 @@ -0,0 +1,224 @@ +/* +* Copyright (c) 2005 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: Container of one reactive authorization item +* +*/ + +// INCLUDE FILES +#include "CPEngAuthorizationItem.h" +#include "PEngListLibraryPanics.h" +#include +#include + + +// ============================ LOCAL FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// Compares two TUint32 numbers. +// Follows standard comparison rules. +// ----------------------------------------------------------------------------- +// +TInt CompareTUint32( const TUint32& aA, const TUint32& aB ) + { + return aA - aB; + } + + +#define ARRAY_ORDER TLinearOrder ( CompareTUint32 ) + +// CONST +// Space required in stream to store one TInt32 - 4 bytes +const TInt KTIntStoreSize = 4; + + +// ============================ MEMBER FUNCTIONS =============================== +// ----------------------------------------------------------------------------- +// CPEngAuthorizationItem::CPEngAuthorizationItem +// ----------------------------------------------------------------------------- +// +CPEngAuthorizationItem::CPEngAuthorizationItem( TInt& aSize ) + : iSize( aSize ) + { + // length of the User Id => 4 bytes + iSize += KTIntStoreSize; + } + + +// ----------------------------------------------------------------------------- +// CPEngAuthorizationItem::ConstructL() +// ----------------------------------------------------------------------------- +// +void CPEngAuthorizationItem::ConstructL( const TDesC& aUserId ) + { + iUserId = aUserId.AllocL(); + iSize += ( aUserId.Length() ); + } + + +// Destructor +CPEngAuthorizationItem::~CPEngAuthorizationItem() + { + if ( iUserId ) + { + iSize -= ( KTIntStoreSize + iUserId->Length() ); + } + else + { + iSize -= KTIntStoreSize; + } + delete iUserId; + } + + +// ----------------------------------------------------------------------------- +// CPEngAuthorizationItem::UserId() +// ----------------------------------------------------------------------------- +// +const TDesC& CPEngAuthorizationItem::Id() const + { + return *iUserId; + } + + +// ----------------------------------------------------------------------------- +// CPEngAuthorizationItem::LocalFlags() +// ----------------------------------------------------------------------------- +// +TInt CPEngAuthorizationItem::LocalFlags() const + { + return iLocalFlags; + } + + +// ----------------------------------------------------------------------------- +// CPEngAuthorizationItem::SetLocalFlags() +// ----------------------------------------------------------------------------- +// +void CPEngAuthorizationItem::SetLocalFlags( TInt aLocalFlag ) + { + iLocalFlags = aLocalFlag; + } + + +// ----------------------------------------------------------------------------- +// CPEngAuthorizationItem::ExternalizeL() +// ----------------------------------------------------------------------------- +// +void CPEngAuthorizationItem::ExternalizeL( RWriteStream& aStream ) const + { + aStream.WriteInt32L( iUserId->Length() ); + aStream << *iUserId; + } + + +// ----------------------------------------------------------------------------- +// CPEngAuthorizationItem::InternalizeL() +// ----------------------------------------------------------------------------- +// +void CPEngAuthorizationItem::InternalizeL( RReadStream& aStream ) + { + __ASSERT_DEBUG( !iUserId, Panic( EReactiveAuthInternalizeMisused ) ); + + // user Id + TInt length( aStream.ReadInt32L() ); + iUserId = HBufC::NewL( aStream, length ); + iSize += length; + } + + + +// ----------------------------------------------------------------------------- +// CPEngAuthorizationItem::ExternalizeArrayL() +// ----------------------------------------------------------------------------- +// +void CPEngAuthorizationItem::ExternalizeArrayL( RWriteStream& aStream, + const RArray& aArray ) + { + TInt count( aArray.Count() ); + aStream.WriteInt32L( count ); + for ( TInt x( 0 ) ; x < count ; ++x ) + { + aStream.WriteInt32L( aArray[ x ] ); + } + } + + +// ----------------------------------------------------------------------------- +// CPEngAuthorizationItem::InternalizeArrayL() +// ----------------------------------------------------------------------------- +// +void CPEngAuthorizationItem::InternalizeArrayL( RReadStream& aStream, + RArray& aArray, + TInt& aSize ) + { + // 4 bytes per each number + aSize -= ( KTIntStoreSize * aArray.Count() ); + TInt count( aStream.ReadInt32L() ); + aArray.Reset(); + for ( TInt x( 0 ) ; x < count ; ++x ) + { + aArray.AppendL( aStream.ReadInt32L() ); + // 4 bytes per each attribute + aSize += KTIntStoreSize; + } + } + + +// ----------------------------------------------------------------------------- +// CPEngAuthorizationItem::SizeOfArray() +// ----------------------------------------------------------------------------- +// +TInt CPEngAuthorizationItem::SizeOfArray( const RArray& aArray ) + { + // 4 bytes per each element of array + count of the array + return KTIntStoreSize * ( aArray.Count() + 1 ); + } + + +// ----------------------------------------------------------------------------- +// CPEngAuthorizationItem::AddAttributeToArrayL() +// ----------------------------------------------------------------------------- +// +TInt CPEngAuthorizationItem::AddAttributeToArrayL( RArray& aArray, + TUint32 aAttribute ) + { + TInt err( aArray.InsertInOrder( aAttribute, ARRAY_ORDER ) ); + if ( err == KErrAlreadyExists ) + { + return 0; //nothing was added => size change 0 + } + + User::LeaveIfError( err ); + return KTIntStoreSize; + } + +// ----------------------------------------------------------------------------- +// CPEngAuthorizationItem::CopyArrayContentL() +// ----------------------------------------------------------------------------- +// +TInt CPEngAuthorizationItem::CopyArrayContentL( RArray& aTarget, + const TArray& aSource ) + { + TInt sizeDelta( 0 ); + TInt count( aSource.Count() ); + for ( TInt x( 0 ) ; x < count ; ++x ) + { + sizeDelta += AddAttributeToArrayL( aTarget, aSource[ x ] ); + } + + return sizeDelta; + } + + +// End of File