kernel/eka/debug/crashMonitor/src/scmlockdata.cpp
changeset 0 a41df078684a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/kernel/eka/debug/crashMonitor/src/scmlockdata.cpp	Mon Oct 19 15:55:17 2009 +0100
@@ -0,0 +1,190 @@
+// Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "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:
+// e32\debug\crashMonitor\src\scmlockdata.cpp
+// some utility classes for writing data to flash buffer
+// 
+//
+
+/**
+ @file
+ @internalTechnology
+*/
+
+
+#include <scmdatatypes.h>
+
+namespace Debug
+	{
+	
+	/**
+	 * TSCMLockData constructor
+	 * @param none
+	*/
+	TSCMLockData::TSCMLockData()
+	: iId(ESCMLocks)
+	, iMutexHoldCount(-1)
+	, iMutexThreadWaitCount(-1)		
+		{	
+		}
+
+	/**
+	 * TSCMLockData Serialize 
+	 * @param aWriter byte stream to use
+	 * @return N/A
+	*/
+	TInt TSCMLockData::Serialize(TByteStreamWriter& aWriter)
+		{
+		TInt startPos = aWriter.CurrentPosition();
+			
+		// ID saved first 
+		if(iId != ESCMLocks)
+			{
+			CLTRACE("TSCMLockData::Serialize Corrupt ID");
+			return KErrCorrupt;
+			}
+		
+		// write id first
+		aWriter.WriteInt(iId);		 				    // 4		
+		// 2 counts written as shorts (should be enough range!)
+		aWriter.WriteShort((TInt16) iMutexHoldCount);			// 2
+		aWriter.WriteShort((TInt16) iMutexThreadWaitCount);      // 2
+		aWriter.WriteShort((TInt16) iLockCount);      // 2
+		
+			
+		TInt endPos = aWriter.CurrentPosition();
+		if( endPos - startPos != GetSize())
+			{
+			// error between actual size & real size in data
+			CLTRACE("TSCMLockData::Serialize serialization size error");	
+			return KErrCorrupt;
+			}
+		
+		return KErrNone;
+		}
+	
+	/**
+	 * Reads the classes data from the specified byte stream
+	 * @param aReader Byte stream to use
+	 * @return void
+	 */
+	TInt TSCMLockData::Deserialize(TByteStreamReader& aReader)
+		{
+		TInt startPos = aReader.CurrentPosition();
+		
+		iId = (SCMStructId)aReader.ReadInt();					// 4
+		if(iId != ESCMLocks)
+			{
+			CLTRACE("TSCMLockData::Deserialize Corrupt ID read");
+			return KErrCorrupt;
+			}
+		
+		iMutexHoldCount = (TInt) aReader.ReadShort();
+		iMutexThreadWaitCount = (TInt) aReader.ReadShort();
+		iLockCount =  (TInt) aReader.ReadShort();
+		
+		
+		TInt endPos = aReader.CurrentPosition();
+		if( endPos - startPos != GetSize())
+			{			
+			CLTRACE("TSCMLockData::Deserialize size error");	
+			return KErrCorrupt;
+			}
+		return KErrNone;
+		}
+	
+	/**
+	 * Returns the externalised size of this class
+	 * @return TInt size
+	 */
+	TInt TSCMLockData::GetSize() const
+		{
+		return KSCMLockDataMaxSize;		
+		}
+		
+	/**
+	 * MutexHoldCount
+	 * @param none
+	 * @return mutex hold count
+	*/
+	TInt TSCMLockData::MutexHoldCount() const
+		{
+		return iMutexHoldCount;
+		}
+	
+	/**
+	 * SetMutexHoldCount
+	 * @param 
+	 * @return 
+	*/
+	void TSCMLockData::SetMutexHoldCount(TInt aMutexHoldCount)
+		{
+		iMutexHoldCount = aMutexHoldCount;
+		}
+	
+	/**
+	 * MutexThreadWaitCount
+	 * @param none
+	 * @return number of threads waiting on held mutex - will only be valid if
+	 * MutexHoldCount > 0
+	*/
+	TInt TSCMLockData::MutexThreadWaitCount() const
+		{
+		return iMutexThreadWaitCount;
+		}
+	
+	/**
+	 * SetMutexThreadWaitCount
+	 * @param TInt - number of threads waiting on held mutex(es)
+	 * @return void
+	*/
+	void TSCMLockData::SetMutexThreadWaitCount(TInt aMutexThreadWaitCount)
+		{
+		iMutexThreadWaitCount = aMutexThreadWaitCount;
+		}		
+	
+	/**
+	 * LockCount
+	 * @param none
+	 * @return TIOnt - the lock count
+	*/
+	TInt TSCMLockData::LockCount() const
+		{
+		return iLockCount;
+		}
+		
+	/**
+	 * SetLockCount
+	 * @param TInt - number of locks held
+	 * @return void
+	*/
+	void TSCMLockData::SetLockCount(TInt aLockCount)
+		{
+		iLockCount = aLockCount;
+		}
+
+	TBool TSCMLockData::operator == (const TSCMLockData& aOther) const
+		{
+		return ( iId == aOther.iId &&  
+				 iMutexHoldCount == aOther.iMutexHoldCount &&			 
+				 iMutexThreadWaitCount == aOther.iMutexThreadWaitCount &&
+				 iLockCount == aOther.iLockCount ); 	
+		}
+	
+	TBool TSCMLockData::operator != (const TSCMLockData& aOther) const
+		{
+		return !(*this == aOther);
+		}
+	}
+
+