diff -r 000000000000 -r 29b1cd4cb562 bluetooth/btcomm/src/portstate.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bluetooth/btcomm/src/portstate.cpp Fri Jan 15 08:13:17 2010 +0200 @@ -0,0 +1,112 @@ +// Copyright (c) 1997-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: +// Together, these classes and the CBTPortProxy implement the +// State pattern. The states themselves are implemented using +// the Flyweight pattern. Each state is a Flyweight object +// and CBTPortStateFactory is manager of these objects. As a +// result of being a flyweight, no state object may have a state +// that can't be shared between all possible users of the state. +// +// + +#include +#include +#include "btcomm.h" +#include "btstate.h" +#ifdef DEBUG +#include "btcommutil.h" +#endif + +#ifdef __FLOG_ACTIVE +_LIT8(KLogComponent, LOG_COMPONENT_BT_COMM); +#endif + +CBTPortStateFactory::CBTPortStateFactory() +/** + CBTPortStateFactory constructor nulls all the iState ptrs in here. +**/ + { + LOG_FUNC + iStates.Reset(); + } + +CBTPortStateFactory::~CBTPortStateFactory() +/** + CBTPortStateFactory destructor deletes all states. +**/ + { + LOG_FUNC + iStates.DeleteAll(); + } + +CBTPortStateFactory* CBTPortStateFactory::NewL() +/** + This creates the static CSY state objects. + Declared private so only a friend (CBTPortFactory) + can instantiate one of these. +**/ + { + LOG_STATIC_FUNC + CBTPortStateFactory *psf; + psf=new (ELeave) CBTPortStateFactory(); + CleanupStack::PushL(psf); + psf->InitL(); + CleanupStack::Pop(); + return psf; + } + +void CBTPortStateFactory::InitL() +/** + This method creates the static instances of the CSY state objects. +**/ + { + LOG_FUNC + iStates[EIdle] =new (ELeave) TBTPortStateIdle(this); + iStates[ELoadingProtocol] =new (ELeave) TBTPortStateLoadingProtocol(this); + iStates[EDiscovering] =new (ELeave) TBTPortStateDiscovering(this); + iStates[ESDPConnected] =new (ELeave) TBTPortStateSDPConnected(this); + iStates[ESDPServiceQuery] =new (ELeave) TBTPortStateSDPServiceQuery(this); + iStates[ESDPAttribListRetrieved] =new (ELeave) TBTPortStateSDPAttributeListRetrieved(this); + iStates[EConnecting] =new (ELeave) TBTPortStateConnecting(this); + iStates[EOpen] =new (ELeave) TBTPortStateOpen(this); + iStates[EClosing] =new (ELeave) TBTPortStateClosing(this); + iStates[EError] =new (ELeave) TBTPortErrorState(this); + iStates[ESDPServiceIDListRetrieved] =new (ELeave) TBTPortStateServiceIDListRetrieved(this); + } + +TBTPortState& CBTPortStateFactory::GetState(const TCSYState aState) +/** + Returns ptr to the state object corresponding to the TCSYState passed in. +**/ + { + LOG_FUNC + __ASSERT_DEBUG(aState != EMaxCSYStates, BTCommUtil::Panic(EBTCommPortStateOutOfBounds)); + return *iStates[aState]; + } + +TInt CBTPortStateFactory::StateIndex(const TBTPortState* aState) const + { + LOG_FUNC + TInt state; + for (state = 0; state < EMaxCSYStates; state++) + { + if (iStates[state] == aState) + { + return state; + } + } + + return KUnknownState; + } +