presencecache/inc/cacheobjecthelpers.inl
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 11 May 2010 16:00:21 +0300
branchRCL_3
changeset 11 2828b4d142c0
parent 0 e686773b3f54
permissions -rw-r--r--
Revision: 201017 Kit: 201019

/*
* Copyright (c) 2008 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:  Templated algorithms to simplify object handling
*
*/


#include <e32base.h>


// -----------------------------------------------------------------------------
// TCacheObjectPacker::PackL() implementation.
// -----------------------------------------------------------------------------
//
template< class T >
HBufC8* TCacheObjectPacker<T>::PackL( const T& aObj )
	{
    // we don't know how large the returned descriptor is going to be
    CBufFlat* packBuf = CBufFlat::NewL( KObjectBufGranurality );
    CleanupStack::PushL( packBuf );

    RBufWriteStream ws;
    ws.Open( *packBuf ); // CSI: 65 #
    CleanupClosePushL( ws );

    aObj.ExternalizeL( ws );

    ws.CommitL();
    CleanupStack::PopAndDestroy(); //ws

    // now CBufFlat contains the descriptor
    HBufC8* packBufDesc = packBuf->Ptr(0).AllocL();

    CleanupStack::PopAndDestroy( packBuf );
    return packBufDesc;

	}

// -----------------------------------------------------------------------------
// TCacheObjectPacker::UnPackL() implementation.
// -----------------------------------------------------------------------------
//
template< class T >
void TCacheObjectPacker<T>::UnPackL( T& aObj, const TDesC8& aPack )
	{
    if ( ! aPack.Length() )
        {
        // empty, don't attempt to unpack.
        return;
        }

    RDesReadStream rs;
    CleanupClosePushL( rs );
    rs.Open( aPack ); // CSI: 65 #
    aObj.InternalizeL( rs );
    CleanupStack::PopAndDestroy(); // rs

	}