ncdengine/provider/server/src/ncddbmaxsizemap.cpp
changeset 0 ba25891c3a9e
--- /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;
+    }