--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingappbase/ncnlist/src/CNcnUnpackDescrArray.cpp Thu Dec 17 08:44:11 2009 +0200
@@ -0,0 +1,138 @@
+/*
+* 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: Class for unpacking a descriptor array received via IPC.
+*
+*/
+
+
+
+#include "CNcnUnpackDescrArray.h"
+#include <s32mem.h>
+
+namespace {
+
+// Local constants and definitions
+
+const TInt KNcnPackedArrayGranularity = 4;
+
+// Local utility functions:
+
+void UnpackArrayL( const TDes8& aBuffer, CDesCArray& aArray )
+ {
+ RDesReadStream stream( aBuffer );
+ CleanupClosePushL( stream );
+
+ TInt status = KErrNone;
+ do
+ {
+ TInt length( 0 );
+ TRAP( status, length = stream.ReadInt32L() );
+ if ( status == KErrNone && length > 0 )
+ {
+ HBufC* desBuf = HBufC::NewLC( length );
+ TPtr desBufPtr = desBuf->Des();
+ stream.ReadL( desBufPtr, length );
+ aArray.AppendL( *desBuf );
+ CleanupStack::PopAndDestroy( desBuf );
+ }
+ }
+ while ( status == KErrNone );
+
+ if ( status != KErrEof )
+ {
+ User::Leave( status );
+ }
+ CleanupStack::PopAndDestroy(); // stream
+ }
+
+} // namespace
+
+// ----------------------------------------------------------------------------
+// MEMBER FUNCTIONS
+// ----------------------------------------------------------------------------
+//
+
+// ----------------------------------------------------------------------------
+// CNcnUnpackDescrArray::NewLC
+//
+// Symbian two-phased constructor.
+// ----------------------------------------------------------------------------
+//
+CNcnUnpackDescrArray* CNcnUnpackDescrArray::NewLC()
+ {
+ CNcnUnpackDescrArray* self = new( ELeave ) CNcnUnpackDescrArray;
+ CleanupStack::PushL( self );
+ return self;
+ }
+
+// ----------------------------------------------------------------------------
+// CNcnUnpackDescrArray::UnpackL
+//
+// Unpacks descriptor array from IPC message.
+// ----------------------------------------------------------------------------
+//
+void CNcnUnpackDescrArray::UnpackL( const RMessagePtr2& aMessage, TInt aParam )
+ {
+ const TInt packedLength = aMessage.GetDesLength( aParam );
+ HBufC8* buffer = HBufC8::NewLC( packedLength );
+ TPtr8 bufferPtr = buffer->Des();
+ aMessage.ReadL( aParam, bufferPtr );
+ UnpackArrayL( bufferPtr, iArray );
+ CleanupStack::PopAndDestroy( buffer );
+ }
+
+// ----------------------------------------------------------------------------
+// CNcnUnpackDescrArray::~CNcnUnpackDescrArray
+//
+// Destructor.
+// ----------------------------------------------------------------------------
+//
+CNcnUnpackDescrArray::~CNcnUnpackDescrArray()
+ {
+ }
+
+// ----------------------------------------------------------------------------
+// CNcnUnpackDescrArray::MdcaCount
+//
+// From MDesCArray.
+// ----------------------------------------------------------------------------
+//
+TInt CNcnUnpackDescrArray::MdcaCount() const
+ {
+ return iArray.MdcaCount();
+ }
+
+// ----------------------------------------------------------------------------
+// CNcnUnpackDescrArray::MdcaPoint
+//
+// From MDesCArray.
+// ----------------------------------------------------------------------------
+//
+TPtrC16 CNcnUnpackDescrArray::MdcaPoint( TInt aIndex ) const
+ {
+ return iArray.MdcaPoint( aIndex );
+ }
+
+// ----------------------------------------------------------------------------
+// CNcnUnpackDescrArray::CNcnUnpackDescrArray
+//
+// Constructor.
+// ----------------------------------------------------------------------------
+//
+CNcnUnpackDescrArray::CNcnUnpackDescrArray()
+ : iArray( KNcnPackedArrayGranularity )
+ {
+ }
+
+// End of file