upnpmediaserver/contentdirectoryservice/src/upnpmapbase.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Wed, 18 Aug 2010 10:02:50 +0300
changeset 27 03808033c9a2
parent 0 7f85d04be362
permissions -rw-r--r--
Revision: 201031 Kit: 201033

/** @file
* Copyright (c) 2005-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:  Content Directory
*
*/



// INCLUDE FILES
#include "upnpmapbase.h"

// -----------------------------------------------------------------------------
// CUpnpMapBase::CUpnpMapBase
// C++ default constructor can NOT contain any code, that
// might leave.
// -----------------------------------------------------------------------------
//
CUpnpMapBase::CUpnpMapBase()
{      
}
// -----------------------------------------------------------------------------
// CUpnpMapBase::ConstructL
// Symbian 2nd phase constructor can leave.
// -----------------------------------------------------------------------------
//
void CUpnpMapBase::ConstructL()
{
}
// -----------------------------------------------------------------------------
// CUpnpMapBase::Get
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
TAny* CUpnpMapBase::Get(const TDesC8& aKey)
{
    CUpnpMapElement* mapElement = iFirst;
    TAny* buf = NULL;
    while(mapElement != 0)
    {
        if(mapElement->Key() == aKey)
        {
            buf = mapElement->Value();
            break;
        }
        mapElement = mapElement->Next();
    }
    return buf;
}
// -----------------------------------------------------------------------------
// CUpnpMapBase::PutL
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
void CUpnpMapBase::PutL(const TDesC8& aKey, TAny* aValue)
{
    CUpnpMapElement* newEl = CUpnpMapElement::NewL(aKey, aValue);
    newEl->SetNext(iFirst);
    iFirst = newEl;
}
// -----------------------------------------------------------------------------
// CUpnpMapBase::Remove
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
TAny* CUpnpMapBase::Remove(const TDesC8& aKey)
{
    if( !iFirst ) // empty map
    {
        return NULL;
    }

    TAny* removed = NULL;

    // if first element to be removed
    if( iFirst->Key() == aKey )
    {
        // remove first element
        removed = iFirst->Value();
        CUpnpMapElement* next = iFirst->Next();
        delete iFirst;
        iFirst = next;
    }
    else
    {   
        CUpnpMapElement* prevElement = iFirst;
        CUpnpMapElement* element = iFirst->Next();
        while(element != 0)
        {
            if( element->Key() == aKey )
            {
                prevElement->SetNext( element->Next() );
                removed = element->Value();
                delete element;
                break;
            }
            else
            {
                prevElement = element;
                element = element->Next();
            }
        }
    }
    return removed;
}

// End of File