diff -r 000000000000 -r 1fb32624e06b textrendering/textformatting/undo/UniqueInstanceBase.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/textrendering/textformatting/undo/UniqueInstanceBase.h Tue Feb 02 02:02:46 2010 +0200 @@ -0,0 +1,105 @@ +/* +* Copyright (c) 2000-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: +* +*/ + + +#ifndef UNIQUEINSTANCEBASE_H_ +#define UNIQUEINSTANCEBASE_H_ + +#include + +// The namespace UniqueInstance contains definitions that are not useful to the +// user, but are useful to the implementation. There is no need to use any symbols +// within it directly. +namespace UniqueInstance +{ + +/** +@internalComponent +*/ +typedef TInt TCompareFn(void*,void*); + +/** +destroy free aObject. +@internalComponent +*/ +typedef void TDeleteFn(void* aObjectToBeDeleted); +/** +Copy aObjectToCopy into a newly allocated buffer, return the new object. +aObjectSize is the size of the object that the repository has been specialised +to work with. If this is not a true size of the object (for example in the case +of HBufC) this value should be ignored. +@internalComponent +*/ +typedef void* TCopyFnL(void* aObjectToCopy, TInt aObjectSize); + +struct SElement; +class CRepositoryImpl; +class RInstanceImpl; + +/** + * Type-unsafe repository with shared equivalent objects. + * + * @internalComponent + * @since App-frameworks6.1 + */ +NONSHARABLE_CLASS(CUniqueInstanceRepositoryBase) : public CBase + { +public: + static void* DumbCopyL(void* aObjectTocopy, TInt aNumberOfBytes); + static void DumbDelete(void* aDeleteThis); + + void ConstructL(TCompareFn*, TDeleteFn*, TCopyFnL*, + TInt aMaxLinks, TInt aObjectSize); + ~CUniqueInstanceRepositoryBase(); + void Test() const; + +private: + friend class RInstanceImpl; + CRepositoryImpl* iImpl; + }; + +/** + * Type-unsafe repository client. + * + * @internalComponent + * @since App-frameworks6.1 + */ +class RInstanceImpl + { +public: + explicit RInstanceImpl(CUniqueInstanceRepositoryBase& aRepository); + ~RInstanceImpl(); // asserts that no object is owned + + void TakeL(void* aObject); + void TakeCopyL(void* aObject); + void* Peek() const; + void CopyTo(RInstanceImpl& aOther) const; + void MoveTo(RInstanceImpl& aOther); + void* DropL(); + void Close(); + +private: + RInstanceImpl(RInstanceImpl&); // unimplemented + RInstanceImpl &operator=(const RInstanceImpl&); // unimplemented + + SElement* iPtr; + CRepositoryImpl* iRepository; + }; +} + +#endif // UNIQUEINSTANCEBASE_H_ +