diff -r 000000000000 -r dfb7c4ff071f commsprocess/commsrootserverconfig/configurator/src/c32cmiutils.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/commsprocess/commsrootserverconfig/configurator/src/c32cmiutils.cpp Thu Dec 17 09:22:25 2009 +0200 @@ -0,0 +1,160 @@ +/* +* Copyright (c) 2006-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 "c32cmiutils.h" + +/** A class that differs from TLitC8 only in that it does not have a +dereference operator defined. Assists in building constant arrays +of literal strings, constructed at compile time so no dll data is needed. +@internalComponent +*/ +template +class TStLitC8 + { +public: + inline operator const TDesC8&() const; + inline const TDesC8& operator()() const; + inline operator const __TRefDesC8() const; +public: + TUint iTypeLength; + TText8 iBuf[__Align8(S)]; + }; + +template +inline const TDesC8& TStLitC8::operator()() const + { + return *REINTERPRET_CAST(const TDesC8*,this); + } + +template +inline TStLitC8::operator const TDesC8&() const + { + return *REINTERPRET_CAST(const TDesC8*,this); + } + +template +inline TStLitC8::operator const __TRefDesC8() const + { + return *REINTERPRET_CAST(const TDesC8*,this); + } + +/** +@internalComponent +*/ +#define _STLIT8(name,s) static const TStLitC8 name={sizeof(s)-1,s} + +// List of possible priorities +_STLIT8(KEPriorityMuchLess, "EPriorityMuchLess"); +_STLIT8(KEPriorityLess, "EPriorityLess"); +_STLIT8(KEPriorityNormal, "EPriorityNormal"); +_STLIT8(KEPriorityMore, "EPriorityMore"); +_STLIT8(KEPriorityMuchMore, "EPriorityMuchMore"); +_STLIT8(KEPriorityRealTime, "EPriorityRealTime"); +_STLIT8(KEPriorityAbsoluteVeryLow, "EPriorityAbsoluteVeryLow"); +_STLIT8(KEPriorityAbsoluteLowNormal, "EPriorityAbsoluteLowNormal"); +_STLIT8(KEPriorityAbsoluteLow, "EPriorityAbsoluteLow"); +_STLIT8(KEPriorityAbsoluteBackgroundNormal, "EPriorityAbsoluteBackgroundNormal"); +_STLIT8(KEPriorityAbsoluteBackground, "EPriorityAbsoluteBackground"); +_STLIT8(KEPriorityAbsoluteForegroundNormal, "EPriorityAbsoluteForegroundNormal"); +_STLIT8(KEPriorityAbsoluteForeground, "EPriorityAbsoluteForeground"); +_STLIT8(KEPriorityAbsoluteHighNormal, "EPriorityAbsoluteHighNormal"); +_STLIT8(KEPriorityAbsoluteHigh, "EPriorityAbsoluteHigh"); +_STLIT8(KEPriorityAbsoluteRealTime1, "EPriorityAbsoluteRealTime1"); +_STLIT8(KEPriorityAbsoluteRealTime2, "EPriorityAbsoluteRealTime2"); +_STLIT8(KEPriorityAbsoluteRealTime3, "EPriorityAbsoluteRealTime3"); +_STLIT8(KEPriorityAbsoluteRealTime4, "EPriorityAbsoluteRealTime4"); +_STLIT8(KEPriorityAbsoluteRealTime5, "EPriorityAbsoluteRealTime5"); +_STLIT8(KEPriorityAbsoluteRealTime6, "EPriorityAbsoluteRealTime6"); +_STLIT8(KEPriorityAbsoluteRealTime7, "EPriorityAbsoluteRealTime7"); +_STLIT8(KEPriorityAbsoluteRealTime8, "EPriorityAbsoluteRealTime8"); + +#undef _STLIT8 + +/** priority name-value pair +@internalComponent +*/ +struct TPriorityEntry + { + const TDesC8* iPriorityName; + TThreadPriority iPriority; + }; + +/** +Look-up table of thread priority name-enum pairs. +Ordered to match the most common comms priorities first. +@internalComponent +*/ +static const TPriorityEntry priorityNamePairs[] = + { + reinterpret_cast(&KEPriorityMore), EPriorityMore, + reinterpret_cast(&KEPriorityMuchMore), EPriorityMuchMore, + reinterpret_cast(&KEPriorityRealTime), EPriorityRealTime, + reinterpret_cast(&KEPriorityNormal), EPriorityNormal, + reinterpret_cast(&KEPriorityLess), EPriorityLess, + reinterpret_cast(&KEPriorityMuchLess), EPriorityMuchLess, + reinterpret_cast(&KEPriorityAbsoluteHigh), EPriorityAbsoluteHigh, + reinterpret_cast(&KEPriorityAbsoluteHighNormal), EPriorityAbsoluteHighNormal, + reinterpret_cast(&KEPriorityAbsoluteForeground), EPriorityAbsoluteForeground, + reinterpret_cast(&KEPriorityAbsoluteForegroundNormal), EPriorityAbsoluteForegroundNormal, + reinterpret_cast(&KEPriorityAbsoluteRealTime1), EPriorityAbsoluteRealTime1, + reinterpret_cast(&KEPriorityAbsoluteRealTime2), EPriorityAbsoluteRealTime2, + reinterpret_cast(&KEPriorityAbsoluteRealTime3), EPriorityAbsoluteRealTime3, + reinterpret_cast(&KEPriorityAbsoluteRealTime4), EPriorityAbsoluteRealTime4, + reinterpret_cast(&KEPriorityAbsoluteRealTime5), EPriorityAbsoluteRealTime5, + reinterpret_cast(&KEPriorityAbsoluteRealTime6), EPriorityAbsoluteRealTime6, + reinterpret_cast(&KEPriorityAbsoluteRealTime7), EPriorityAbsoluteRealTime7, + reinterpret_cast(&KEPriorityAbsoluteRealTime8), EPriorityAbsoluteRealTime8, + reinterpret_cast(&KEPriorityAbsoluteBackground), EPriorityAbsoluteBackground, + reinterpret_cast(&KEPriorityAbsoluteBackgroundNormal), EPriorityAbsoluteBackgroundNormal, + reinterpret_cast(&KEPriorityAbsoluteLow), EPriorityAbsoluteLow, + reinterpret_cast(&KEPriorityAbsoluteLowNormal), EPriorityAbsoluteLowNormal, + reinterpret_cast(&KEPriorityAbsoluteVeryLow), EPriorityAbsoluteVeryLow + }; + +/** +Converts a thread priority name to the corresponding enum value. +@param aPriorityName The input priority name as a descriptor, either a TThreadPriority +enum value such as "10" or a full TThreadPriority enum name such a "EPriorityMore", +case insensitive. +@param aPriority On success, contains the thread priority enumerator value +@return KErrNone if successful, KErrCorrupt if aPriorityName is unrecognised. If priority +is passed in as a number it will not be checked for validity, and KErrNone always returned: +calling code must beware that passing invalid enum values to RThread will result in a panic. +@internalComponent +*/ +TInt C32CmiUtils::ThreadPriorityNameToEnum(const TDesC8& aPriorityName, TThreadPriority& aPriority) + { + TLex8 name(aPriorityName); + TInt priorityValue; + TInt valResult = name.Val(priorityValue); + if ((valResult == KErrNone) && name.Eos()) + { + aPriority = (TThreadPriority)priorityValue; + return KErrNone; + } + const TInt numPriorities = sizeof(priorityNamePairs) / sizeof(TPriorityEntry); + for (TInt i = 0; i < numPriorities; ++i) + { + if (aPriorityName.CompareF(*priorityNamePairs[i].iPriorityName) == 0) + { + aPriority = priorityNamePairs[i].iPriority; + return KErrNone; + } + } + return KErrCorrupt; + } +