diff -r 000000000000 -r ba25891c3a9e ncdengine/provider/server/src/ncddbmaxsizemap.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ncdengine/provider/server/src/ncddbmaxsizemap.cpp Thu Dec 17 08:51:10 2009 +0200 @@ -0,0 +1,157 @@ +/* +* Copyright (c) 2006 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: Contains CNcdDbMaxSizeMap class +* +*/ + + +#include "ncddbmaxsizemap.h" +#include "catalogsdebug.h" + + + +CNcdDbMaxSizeMap* CNcdDbMaxSizeMap::NewL( const TInt aDefaultMaxSize ) + { + CNcdDbMaxSizeMap* self = + CNcdDbMaxSizeMap::NewLC( aDefaultMaxSize ); + CleanupStack::Pop( self ); + return self; + } + +CNcdDbMaxSizeMap* CNcdDbMaxSizeMap::NewLC( const TInt aDefaultMaxSize ) + { + CNcdDbMaxSizeMap* self = + new(ELeave) CNcdDbMaxSizeMap( aDefaultMaxSize); + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + + +CNcdDbMaxSizeMap::CNcdDbMaxSizeMap( const TInt aDefaultMaxSize ) +: KElementWasNotFound( -1 ), + iDefaultMaxSize( aDefaultMaxSize ) + { + // Nothing to do here + } + +void CNcdDbMaxSizeMap::ConstructL() + { + // Nothing to do here + } + +CNcdDbMaxSizeMap::~CNcdDbMaxSizeMap() + { + // Release the arrays + iKeyArray.Reset(); + iValueArray.Reset(); + } + + +TInt CNcdDbMaxSizeMap::SetValue( const TUid& aKey, + TInt aValue ) + { + DLTRACEIN(("")); + + TInt error( KErrNone ); + TInt keyIndex( KeyIndex( aKey ) ); + + if ( keyIndex != KElementWasNotFound ) + { + DLINFO(("Key element already exists.")) + // Because the key was already in the array + // we also got the value index. So, just replace + // the old value by the new one. + iValueArray[ keyIndex ] = aValue; + } + else + { + DLINFO(("Key element was not found. Create new pair.")); + // The key was not found. So new key and corresponding + // value has to be set. + error = iKeyArray.Append( aKey ); + if ( error != KErrNone ) + { + // Do not do anything else because appending + // could not be done. + DLERROR(("Key array append error: %d", error)); + DLTRACEOUT(("")); + return error; + } + + // Key was appended succesfully + error = iValueArray.Append( aValue ); + if ( error != KErrNone ) + { + DLERROR(("value array appenderror: %d", error)); + + // Value could not be appended + // Remove the key that was appended above + // from the end of thekey array + // because we could not append the corresponding + // value. This way the key and value pairs will + // be in sync. + iKeyArray.Remove( iKeyArray.Count() - 1 ); + + // Leave with the given value. + DLTRACEOUT(("")); + return error; + } + } + + DLTRACEOUT(("")); + + return error; + } + + +TInt CNcdDbMaxSizeMap::Value( const TUid& aKey ) const + { + DLTRACEIN(("")); + + TInt index( KeyIndex( aKey ) ); + + if ( index != KElementWasNotFound ) + { + // Index was found. So, return the value. + // Notice that key value has always the corresponding + // value in the value array. The indexes are same for + // the key and the value. + DLTRACEOUT(("Value index found: %d", index)); + return iValueArray[ index ]; + } + else + { + // The key was not found. So, return the default. + DLTRACEOUT(("Value index not found. Use default: %d", iDefaultMaxSize)); + return iDefaultMaxSize; + } + } + + +TInt CNcdDbMaxSizeMap::KeyIndex( const TUid& aKey ) const + { + for ( TInt i = 0; i < iKeyArray.Count(); ++i ) + { + if ( iKeyArray[ i ] == aKey ) + { + // Correct key was found. + // So, return the index. + return i; + } + } + + // Key was not found. + return KElementWasNotFound; + }