--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/usbmgmt/usbmgr/host/functiondrivers/ms/msmm/server/src/msmmnodebase.cpp Tue Feb 02 02:02:59 2010 +0200
@@ -0,0 +1,184 @@
+/*
+* Copyright (c) 2008-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:
+*
+*/
+
+/**
+ @file
+ @internalComponent
+*/
+
+#include "msmmnodebase.h"
+
+#include <usb/usblogger.h>
+
+#ifdef __FLOG_ACTIVE
+_LIT8(KLogComponent, "UsbHostMsmmServer");
+#endif
+
+TMsmmNodeBase::TMsmmNodeBase(TInt aIdentifier):
+iIdentifier(aIdentifier),
+iNextPeer(NULL),
+iFirstChild(NULL),
+iLastChild(NULL),
+iParent(NULL)
+ {
+ LOG_FUNC
+ }
+
+TMsmmNodeBase::~TMsmmNodeBase()
+ {
+ LOG_FUNC
+ // Remove current node from the parent node and destroy it.
+ DestroyNode();
+ }
+
+void TMsmmNodeBase::DestroyNode()
+ {
+ LOG_FUNC
+ TMsmmNodeBase* parentNode = iParent;
+ TMsmmNodeBase* iterator(this);
+ TMsmmNodeBase* iteratorPrev(NULL);
+ TMsmmNodeBase* iteratorNext(NULL);
+
+ if (parentNode)
+ {
+ // A parent node exists
+ iterator = parentNode->iFirstChild;
+ if (iterator)
+ {
+ // iteratorPrev equal NULL at beginning;
+ iteratorNext= iterator->iNextPeer;
+ }
+ // Go through each child node to find the node to be destroyed
+ while (iterator && (iterator != this))
+ {
+ iteratorPrev = iterator;
+ iterator = iteratorNext;
+ if(iteratorNext)
+ {
+ iteratorNext = iteratorNext->iNextPeer;
+ }
+ }
+ if (iterator)
+ {
+ // Matched node found
+ if (parentNode->iLastChild == iterator)
+ {
+ parentNode->iLastChild = iteratorPrev;
+ }
+ if (iteratorPrev)
+ {
+ iteratorPrev->iNextPeer = iteratorNext;
+ }
+ else
+ {
+ parentNode->iFirstChild = iteratorNext;
+ }
+ }
+ else
+ {
+ // No matched node
+ return;
+ }
+ }
+
+ // Remove all children node
+ if (iFirstChild)
+ {
+ // Current node isn't a leaf node
+ iterator = iFirstChild;
+ iteratorNext= iterator->iNextPeer;
+ while (iterator)
+ {
+ delete iterator;
+ iterator = iteratorNext;
+ if (iteratorNext)
+ {
+ iteratorNext = iterator->iNextPeer;
+ }
+ }
+ }
+ }
+
+void TMsmmNodeBase::AddChild(TMsmmNodeBase* aChild)
+ {
+ LOG_FUNC
+ if (!iFirstChild)
+ {
+ iFirstChild = aChild;
+ }
+ else
+ {
+ iLastChild->iNextPeer = aChild;
+ }
+ iLastChild = aChild;
+ aChild->iParent = this;
+ }
+
+TMsmmNodeBase* TMsmmNodeBase::SearchInChildren(TInt aIdentifier)
+ {
+ LOG_FUNC
+ TMsmmNodeBase* iterator(iFirstChild);
+
+ while (iterator)
+ {
+ if (iterator->iIdentifier == aIdentifier)
+ {
+ break;
+ }
+ iterator = iterator->iNextPeer;
+ }
+
+ return iterator;
+ }
+
+// TUsbMsDevice
+// Function memeber
+TUsbMsDevice::TUsbMsDevice(const TUSBMSDeviceDescription& aDevice):
+TMsmmNodeBase(aDevice.iDeviceId),
+iDevice(aDevice)
+ {
+ LOG_FUNC
+ }
+
+// TUsbMsInterface
+// Function memeber
+TUsbMsInterface::TUsbMsInterface(TUint8 aInterfaceNumber,
+ TUint32 aInterfaceToken):
+TMsmmNodeBase(aInterfaceNumber),
+iInterfaceNumber(aInterfaceNumber),
+iInterfaceToken(aInterfaceToken)
+ {
+ LOG_FUNC
+ }
+
+TUsbMsInterface::~TUsbMsInterface()
+ {
+ LOG_FUNC
+ iUsbMsDevice.Close();
+ }
+
+// TUsbMsLogicalUnit
+// Function memeber
+TUsbMsLogicalUnit::TUsbMsLogicalUnit(TUint8 aLogicalUnitNumber, TText aDrive):
+TMsmmNodeBase(aLogicalUnitNumber),
+iLogicalUnitNumber(aLogicalUnitNumber),
+iDrive(aDrive)
+ {
+ LOG_FUNC
+ }
+
+// End of file