author | Gareth Stockwell <gareth.stockwell@accenture.com> |
Fri, 22 Oct 2010 11:38:29 +0100 | |
branch | bug235_bringup_0 |
changeset 206 | c170e304623f |
parent 0 | 5d03bc08d59c |
permissions | -rw-r--r-- |
// Copyright (c) 1999-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: // Definition of object index class // // #ifndef __WSOBJIX_H__ #define __WSOBJIX_H__ #include <e32std.h> #include <e32base.h> class CWsObject; /** A simple structure to hold a CWsObject and the associated handle. @internalComponent @released */ class TWsObject { public: enum { ESlotMask=0x0000FFFF, //The handle on the client side uses these 16 bits to store the slot position ECountMask=0x7FFF0000, //These 15 bits are used to keep a unique number (the slot reuse count) ETypeMask=ESlotMask, //The handle on the server side uses these 16 bits to store the type of the object ECountPosition=16, ECountBits=15, ECountInc=1<<ECountPosition, ECountWrapAround=1<<ECountBits, }; public: inline TWsObject(CWsObject* aObject,TInt aHandle); public: CWsObject* iObject; TUint iHandle; }; /** An array of CWsObject instances and their handles. Each client session maintains a list of the objects it owns. Note that the first item in the iObjectArray array is a dummy item. This is because part of the handle is used as an index in the array and we want to avoid index 0 because a null handle has a special meaning. @see CWsClient @internalComponent @released */ class CWsObjectIx : public CBase { public: CWsObjectIx(); ~CWsObjectIx(); void ConstructL(); TInt AddL(CWsObject* anObj); void Remove(const TWsObject* aObject); void Remove(CWsObject* anObj); CWsObject* HandleToObject(TInt aHandle) const; inline const CWsObject* At(TInt aPos) const; const TWsObject* FirstObject() const; TInt At(const CWsObject* anObj); void Tidy(); TInt Count() const; // Count of non NULL objects in the array TInt Length() const; // Length of array including empty slots private: CArrayFixFlat<TWsObject> iObjectArray; TInt iNewObjectCount; }; // // inlines // // // // TWsObject // inline TWsObject::TWsObject(CWsObject* aObject,TInt aHandle) :iObject(aObject), iHandle(aHandle) {} // // CWsObjectIx // inline const CWsObject* CWsObjectIx::At(TInt aPos) const {return iObjectArray[aPos].iObject;} #endif