radioengine/settings/src/cradiosettingsbase.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Fri, 16 Apr 2010 14:58:55 +0300
changeset 14 63aabac4416d
parent 13 46974bebc798
permissions -rw-r--r--
Revision: 201011 Kit: 201015

/*
* Copyright (c) 2009 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:
*
*/

// System includes
#include <s32mem.h>

// User includes
#include "cradiorepositorymanager.h"
#include "cradiosettingsbase.h"
#include "cradioenginelogger.h"


// ======== MEMBER FUNCTIONS ========

// ---------------------------------------------------------------------------
//
// ---------------------------------------------------------------------------
//
CRadioSettingsBase::CRadioSettingsBase( CRadioRepositoryManager& aRepositoryManager,
                                        CCoeEnv& aCoeEnv )
    : iCoeEnv( aCoeEnv )
    , iRepositoryManager( aRepositoryManager )
    {
    }

// ---------------------------------------------------------------------------
//
// ---------------------------------------------------------------------------
//
CRadioSettingsBase::~CRadioSettingsBase()
    {
    }

// ---------------------------------------------------------------------------
// Writes a desciptor array to the repository.
// ---------------------------------------------------------------------------
//
void CRadioSettingsBase::WriteArrayEntityL( const TUid& aUid, TUint32 aKey, const CDesCArray& aArray )
    {
    LOG_FORMAT( "CRadioSettingsBase::WriteArrayEntityL( aUid = %d, aKey = %d )", aUid.iUid, aKey );

    CBufFlat* buf = CBufFlat::NewL( KRadioEntityBuf8Length );
    CleanupStack::PushL( buf );
    RBufWriteStream stream( *buf );
    CleanupClosePushL( stream );

    TInt count = aArray.MdcaCount();
    stream << TCardinality( count );

    LOG_FORMAT( "     count = %d", count );

    for ( TInt i = 0; i < count; i++ )
        {
        DEBUGVAR( TPtrC ptr( aArray.MdcaPoint( i ) ) );
        LOG_FORMAT( "     entry %d: %S", i, &ptr );
        stream << aArray.MdcaPoint( i );
        }

    stream.CommitL();

    CleanupStack::PopAndDestroy( &stream );

    TRadioEntityBuf8 entityBuf( buf->Ptr( 0 ).Left( KRadioEntityBuf8Length ) );
    User::LeaveIfError( iRepositoryManager.SetEntityValue( aUid, aKey, entityBuf ) );

    CleanupStack::PopAndDestroy( buf );
    }

// ---------------------------------------------------------------------------
// Reads a descriptor array from the repository.
// ---------------------------------------------------------------------------
//
CDesCArray* CRadioSettingsBase::ReadArrayEntityL( const TUid& aUid, TUint32 aKey ) const
    {
    LOG_FORMAT( "CRadioSettingsBase::ReadArrayEntityL( aUid = %d, aKey = %d )", aUid.iUid, aKey );

    CBufFlat* buf = CBufFlat::NewL( KRadioEntityBuf8Length );
    CleanupStack::PushL( buf );
    buf->InsertL( 0, iRepositoryManager.EntityValueDes8( aUid, aKey ) );
    RBufReadStream stream( *buf );
    CleanupClosePushL( stream );

    TCardinality count;
    stream >> count;

    LOG_FORMAT( "     count = %d", static_cast<TInt>( count ) );

    CDesCArray* array = new ( ELeave ) CDesCArrayFlat( Max( static_cast<TInt>( count ), 1 ) );
    CleanupStack::PushL( array );

    for ( TInt i = 0; i < count; i++ )
        {
        HBufC* curBuf = HBufC::NewLC( stream, KMaxTInt );
        DEBUGVAR( TPtrC ptr( *curBuf ) );
        LOG_FORMAT( "     entry %d: %S", i, &ptr );
        array->AppendL( *curBuf );
        CleanupStack::PopAndDestroy( curBuf );
        }

    CleanupStack::Pop( array );
    CleanupStack::PopAndDestroy( 2, buf );

    return array;
    }