PECengine/ListLibrary2/AuthSrc/CPEngAuthorizationItem.cpp
changeset 0 094583676ce7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/PECengine/ListLibrary2/AuthSrc/CPEngAuthorizationItem.cpp	Thu Dec 17 08:41:52 2009 +0200
@@ -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    <e32std.h>
+#include    <s32strm.h>
+
+
+// ============================ 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<TUint32> ( 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<TUint32>& 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<TUint32>& 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<TUint32>& aArray )
+    {
+    // 4 bytes per each element of array + count of the array
+    return KTIntStoreSize * ( aArray.Count() + 1 );
+    }
+
+
+// -----------------------------------------------------------------------------
+// CPEngAuthorizationItem::AddAttributeToArrayL()
+// -----------------------------------------------------------------------------
+//
+TInt CPEngAuthorizationItem::AddAttributeToArrayL( RArray<TUint32>& 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<TUint32>& aTarget,
+                                                const TArray<TUint32>& 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