messagingappbase/ncnlist/src/CNcnUnpackDescrArray.cpp
changeset 0 72b543305e3a
--- /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