diff -r 61bc0f252b2b -r bac7acad7cb3 camerauis/cameraapp/generic/inc/camrarray.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/camerauis/cameraapp/generic/inc/camrarray.h Wed Sep 01 12:30:54 2010 +0100 @@ -0,0 +1,103 @@ +/* +* Copyright (c) 2007 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 CAM_RARRAY_H +#define CAM_RARRAY_H + +class CCamRArray : public CBase + { + public: + + CCamRArray( TUint32* aArray, TInt aSize ) + : iReferenced ( NULL ), + iReferenceCount( 0 ), + iArray( aArray ), + iSize ( aSize ) + {}; + + CCamRArray( CCamRArray& aOther ) + { + CCamRArray::MakeCopy( aOther, *this ); + }; + + public: + + void Attach() + { + ++iReferenceCount; + }; + + void Detach() + { + if( --iReferenceCount <= 0 ) + delete this; + } + + inline TUint32& operator[]( TInt aIndex ) + { + return iArray[aIndex]; + }; + + inline const TUint32& operator[]( TInt aIndex ) const + { + return iArray[aIndex]; + }; + + inline TInt Size() const + { + return iSize; + }; + + private: + + static void MakeCopy( CCamRArray& aFrom, CCamRArray& aTo ) + { + aTo.iArray = aFrom.iArray; + aTo.iSize = aFrom.iSize; + + for( TInt i = 1; i < aTo.Size(); i++) + { + TInt tempp = aTo[i]; + TInt tempp2 = aFrom[i]; + } + + aFrom.Attach(); // aTo is one reference more. + aTo.iReferenced = &aFrom; // Used to detach aTo from aFrom + } + + ~CCamRArray() + { + if( iReferenced ) + iReferenced->Detach(); + else + delete [] iArray; + + iArray = NULL; + iSize = 0; + }; + + private: + + TInt iReferenceCount; + CCamRArray* iReferenced; + + TUint32* iArray; + TInt iSize; + }; + +#endif