diff -r 000000000000 -r e4d67989cc36 lowlevellibsandfws/apputils/src/BaAssert.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lowlevellibsandfws/apputils/src/BaAssert.cpp Tue Feb 02 02:01:42 2010 +0200 @@ -0,0 +1,232 @@ +// Copyright (c) 2003-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: +// + +#include +#include "BaAssert.h" +#include "BaCompileAssert.h" + +//You are not allowed to add/change something into KErrorMapTbl +//array without adding/changing TBafPanic enum value, which is used +//as an array index for accessing KErrorMapTbl array elements. +LOCAL_D const TInt KErrorMapTbl[] = + { + KErrCorrupt, + KErrCorrupt, //EBafPanicResourceLongerThanBuffer =1, + KErrCorrupt, //EBafPanicMatcherOutOfRange =2, + KErrCorrupt, //EBafPanicTextBufOutOfRange =3, + KErrEof, //EBafPanicResourceReaderEndExceeded =4, + KErrArgument,//EBafPanicResourceReaderStartExceeded =5, + KErrCorrupt, //EBafPanicBulkDataWriting =6, + KErrCorrupt, //EBafPanicBulkDataNotWriting =7, + KErrCorrupt, //EBafPanicBulkDataCannotSaveToFile =8, + KErrCorrupt, //EBafPanicBulkDataNotEmbedded =9, + KErrCorrupt, //EBafPanicSoundDataCannotChangeCompressorType =10, + KErrCorrupt, //EBafPanicSoundPlaying =11, + KErrCorrupt, //EBafPanicSoundSamplerActive =12, + KErrCorrupt, //EBafPanicLibAssocAlreadySet =13, + KErrCorrupt, //EBafPanicSystemSoundNoPath =14, + KErrCorrupt, //EBafPanicUnicodeTextPaddingError =15, + KErrCorrupt, //EBafPanicOldResourceFormat =16, // no longer used + KErrCorrupt, //EBafPanicInvalidSoundCategory =17, + KErrCorrupt, //EBafPanicInvalidSoundPriority =18, + KErrCorrupt, //EBafPanicNullUid =19, + KErrCorrupt, //EBafPanicBadResourceFileFormat =20, + KErrCorrupt, //EBafPanicBadArrayPosition =21, + KErrCorrupt, //EBafPanicBadCompareNames =22, + KErrCorrupt, //EBafPanicBadDrive =23, + KErrCorrupt, //EBafPanicBadDecompression =24, + KErrCorrupt, //EBafPanicIndexIsOddNumberOfBytes =25, + KErrCorrupt, //EBafPanicBadNumberOfResources =26, + KErrCorrupt, //EBafPanicBadCacheLength =27, + KErrCorrupt, //EBafPanicBadIndexLength1 =28, + KErrCorrupt, //EBafPanicBadIndexLength2 =29, + KErrCorrupt, //EBafPanicBadIndexLength3 =30, + KErrArgument,//EBafPanicBadInitialization1 =31, We can't get ROM file address, so we expect that it is RAM file + KErrArgument,//EBafPanicBadInitialization2 =32, + KErrArgument,//EBafPanicBadInitialization3 =33, + KErrCorrupt, //EBafPanicIndexOverRan =34, + KErrCorrupt, //EBafPanicNullPointer =35, + KErrGeneral, //EBafPanicNotOpened =36, CExtra instance is NULL + KErrCorrupt, //EBafPanicNegativeArrayIndex =37, + KErrEof, //EBafPanicEndOfStream1 =38, + KErrEof, //EBafPanicEndOfStream2 =39, + KErrCorrupt, //EBafPanicBadNumberOfConsecutivePrefixBits1 =40, + KErrCorrupt, //EBafPanicBadNumberOfConsecutivePrefixBits2 =41, + KErrCorrupt, //EBafPanicBadNumberOfBitsOffByteBoundary1 =42, + KErrCorrupt, //EBafPanicBadNumberOfBitsOffByteBoundary2 =43, + KErrCorrupt, //EBafPanicNegativeOffsetToFirstBit1 =44, + KErrCorrupt, //EBafPanicNegativeOffsetToFirstBit2 =45, + KErrCorrupt, //EBafPanicBadCurrentBitPosition1 =46, + KErrCorrupt, //EBafPanicBadCurrentBitPosition2 =47, + KErrCorrupt, //EBafPanicBadNumberOfBitsReadFromCurrentByte =48, + KErrCorrupt, //EBafPanicBadNumberOfBitsLeftToRead =49, + KErrCorrupt, //EBafPanicNotConstructed1 =50, + KErrCorrupt, //EBafPanicNotConstructed2 =51, + KErrCorrupt, //EBafPanicNotConstructed3 =52, + KErrCorrupt, //EBafPanicNotConstructed4 =53, + KErrCorrupt, //EBafPanicNotConstructed5 =54, + KErrCorrupt, //EBafPanicNegativeLengthOfBitBuffer =55, + KErrArgument,//EBafPanicNegativeResourceIndex1 =56, + KErrCorrupt, //EBafPanicNegativeResourceIndex2 =57, + KErrCorrupt, //EBafPanicNegativeResourceIndex3 =58, + KErrCorrupt, //EBafPanicBadFlags1 =59, + KErrCorrupt, //EBafPanicBadFlags2 =60, + KErrCorrupt, //EBafPanicBadFlags3 =61, + KErrCorrupt, //EBafPanicBadFlags4 =62, + KErrCorrupt, //EBafPanicBadFlags5 =63, + KErrCorrupt, //EBafPanicBadFlags6 =64, + KErrCorrupt, //EBafPanicNegativeIndexEntry =65, + KErrCorrupt, //EBafPanicBadSizeOfLargestResourceWhenCompletelyUncompressed1=66, + KErrCorrupt, //EBafPanicBadSizeOfLargestResourceWhenCompletelyUncompressed2=67, + KErrCorrupt, //EBafPanicBadSizeOfLargestResourceWhenCompletelyUncompressed3=68, + KErrCorrupt, //EBafPanicBadHeaderLength =69 + KErrCorrupt, //EBafPanicNullPtr1 =70, + KErrArgument,//EBafPanicNullPtr2 =71 + KErrCorrupt, //EBafPanicNullPtr3 =72 + KErrCorrupt, //EBafPanicNullPtr4 =73 + KErrCorrupt, //EBafPanicNullPtr5 =74 + KErrCorrupt, //EBafPanicNullPtr6 =75 + KErrCorrupt, //EBafPanicNullPtr7 =76 + KErrCorrupt, //EBafPanicNullPtr8 =77 + KErrCorrupt, //EBafPanicNullPtr9 =78 + KErrCorrupt, //EBafPanicNullPtr10 =79 + KErrCorrupt, //EBafPanicNullPtr11 =80 + KErrCorrupt, //EBafPanicNullPtr12 =81 + KErrCorrupt, //EBafPanicNullPtr13 =82 + KErrCorrupt, //EBafPanicNullPtr14 =83 + KErrCorrupt, //EBafPanicNegativeNumber =84 + KErrCorrupt, //EBafPanicBadHeader1 =85 + KErrCorrupt, //EBafPanicBadHeader2 =86 + KErrCorrupt, //EBafPanicBadHeader3 =87 + KErrCorrupt, //EBafPanicBadHeader4 =88 + KErrCorrupt, //EBafPanicBadHeader5 =89 + KErrCorrupt, //EBafPanicFileSize =90 + KErrCorrupt, //EBafPanicOverflow =91 + KErrCorrupt, //EBafPanicBadIndex =92 + KErrCorrupt, //EBafPanicNegativeNumber2 =93 + KErrCorrupt, //EBafPanicFileSize2 =94 + KErrCorrupt, //EBafPanicNegativeNumber3 =95 + KErrCorrupt, //EBafPanicNegativePos =96 + KErrCorrupt, //EBafPanicNegativeLength =97 + KErrCorrupt, //EBafPanicMaxLength =98 + KErrCorrupt, //EBafPanicBadIndex2 =99 + KErrCorrupt, //EBafPanicBadIndex3 =100 + KErrCorrupt, //EBafPanicMaxLength2 =101 + KErrCorrupt, //EBafPanicFileSize3 =102 + KErrCorrupt, //EBafPanicStartPos =103 + KErrCorrupt, //EBafPanicStartPos2 =104 + KErrCorrupt, //EBafPanicFileSize4 =105 + KErrCorrupt, //EBafPanicBadOffset =106 + KErrCorrupt, //EBafPanicBadOffset2 =107 + KErrArgument,//EBafPanicBadOpenArg =108 + KErrCorrupt, //EBafPanicBufLength =109 + KErrArgument //EBafPanicRFsConnectArg =110 + }; + +/** This static funtion is used by TBaAssert instances to convert Panic code to +error codes. KErrorMapTbl static array is used. + +@internalComponent +@param aPanicCode - BAFL panic code. +@return Error code - KErrCorrupt, KErrArgument,... +@leave KErrArgument - if the panic code value can't be used as and array index +to access corresponding error code. */ +LOCAL_C TInt Panic2ErrorL(TBafPanic aPanicCode) + { + if(static_cast (aPanicCode) >= (sizeof(KErrorMapTbl)/ sizeof(KErrorMapTbl[0]))) + { + User::Leave(KErrArgument); + } + return KErrorMapTbl[static_cast (aPanicCode)]; + } + +/** Global Panic function. Used internaly by BAFL classes. +The default function behaviour is to call User::Panic(). +@internalComponent */ +GLDEF_C void Panic(TBafPanic aPanic) + { + User::Panic(_L("BAFL"), aPanic); + } + +/** By default TBaAssert methods will panic. +An error will be issued at compile time if the class size is not +sizeof(TBaAssert::TErrorAction). +@internalComponent */ +TBaAssert::TBaAssert() : + iErrorAction(TBaAssert::EPanic) + { + COMPILE_TIME_ASSERT(sizeof(TBaAssert) == sizeof(TBaAssert::TErrorAction)); + } + +/** Initializes TBaAssert object panic/leave behaviour. +@internalComponent +@param aErrorAction - TBaAssert::EPanic or TBaAssert::ELeave. */ +TBaAssert::TBaAssert(TErrorAction aErrorAction) : + iErrorAction(aErrorAction) + { + } + +/** The method panics/leaves if aAssertExprVal value is EFalse. The panic will be raised +only in the DEBUG build. +@internalComponent +@param aAssertExprVal If EFalse, the method panics/leaves. +@param aPanic Panic code. If the method must leave, the code +will be mapped to some Symbian OS error code. */ +void TBaAssert::AssertDebL(TBool aAssertExprVal, TBafPanic aPanic) const + { + DoAssertL(aAssertExprVal, ETrue, aPanic); + } + +/** The method panics/leaves if aAssertExprVal value is EFalse. +@internalComponent +@param aAssertExprVal If EFalse, the method panics/leaves. +@param aPanic Panic code. If the method must leave, the code +will be mapped to some Symbian OS error code. */ +void TBaAssert::AssertRelL(TBool aAssertExprVal, TBafPanic aPanic) const + { + DoAssertL(aAssertExprVal, EFalse, aPanic); + } + +/** @internalComponent */ +void TBaAssert::DoAssertL(TBool aAssertExprVal, TBool aDebug, TBafPanic aPanic) const + { + if(!aAssertExprVal) + { + iErrorAction == TBaAssert::ELeave ? DoLeaveL(aPanic) : DoAssert(aDebug, aPanic); + } + } + +/** @internalComponent */ +void TBaAssert::DoLeaveL(TBafPanic aPanic) const + { + TInt error = Panic2ErrorL(aPanic); + User::Leave(error); + } + +/** @internalComponent */ +void TBaAssert::DoAssert(TBool aDebug, TBafPanic aPanic) const + { + if(aDebug) + { + __ASSERT_DEBUG(EFalse, ::Panic(aPanic)); + } + else + { + ::Panic(aPanic); + } + } + + +