kernel/eka/debug/crashMonitor/src/scmmulticrashinfo.cpp
changeset 9 96e5fb8b040d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/kernel/eka/debug/crashMonitor/src/scmmulticrashinfo.cpp	Thu Dec 17 09:24:54 2009 +0200
@@ -0,0 +1,118 @@
+// 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\scmmulticrashinfo.cpp
+// Class to store info about the crash flash to enable multiple crashes
+// 
+//
+
+/**
+ @file
+ @internalTechnology
+*/
+
+#include <scmdatatypes.h>
+
+namespace Debug
+	{
+	/**
+	 * constructor
+	 */
+	SCMMultiCrashInfo::SCMMultiCrashInfo()
+		: iFirstBlock(NULL)
+		, iCurrentBlock(NULL)
+		{	
+		}
+		
+	/** 
+	 * destructor 
+	 */
+	SCMMultiCrashInfo::~SCMMultiCrashInfo()
+		{
+		ClearList();
+		}
+		
+	/** add a pointer to a block to the list - takes ownership of block
+	 * @param SCMCrashBlockEntry* aBlockEntry block to add
+	 */ 
+	void SCMMultiCrashInfo::AddBlock(SCMCrashBlockEntry* aBlockEntry)
+		{	
+		if(aBlockEntry)
+			{
+			CLTRACE4("SCMMultiCrashInfo::AddBlock iBlockOffset = [%d] [0x%X] iBlockSize = [%d] [0x%X]"
+				, aBlockEntry->iBlockOffset,aBlockEntry->iBlockOffset, aBlockEntry->iBlockSize, aBlockEntry->iBlockSize);
+			if(!iFirstBlock)
+				{
+				// adding to empty list
+				iFirstBlock = aBlockEntry;
+				iCurrentBlock = iFirstBlock;
+				}
+			else
+				{
+				SCMCrashBlockEntry* p = iFirstBlock;	
+				while(p->iNext)
+					{
+					p = p->iNext;
+					}
+				p->iNext = aBlockEntry;
+				}
+			}
+		else
+			{
+			CLTRACE("SCMMultiCrashInfo::AddBlock Adding a NULL block !");	
+			}
+		}
+		
+	
+	/** add a pointer to a block to the list - takes ownership of block 
+	 * @return SCMCrashBlockEntry* returns NULL when no more blocks
+	 * @param none
+	 */ 
+	SCMCrashBlockEntry* SCMMultiCrashInfo::GetNextBlock()
+		{
+		SCMCrashBlockEntry* p = iCurrentBlock;
+		if(iCurrentBlock)
+			{
+			iCurrentBlock = iCurrentBlock->iNext;
+			}
+		return p; 
+		}
+	
+	/** 
+	 * sets current block to first in list 
+	 */
+	void SCMMultiCrashInfo::Reset()
+		{
+		iCurrentBlock = iFirstBlock;
+		}
+		
+	/**
+	 * Clears all entries in the list 
+	 */
+	void SCMMultiCrashInfo::ClearList()
+		{
+		SCMCrashBlockEntry* p = iFirstBlock;
+			
+		while(p)
+			{
+			SCMCrashBlockEntry* tmp = p;
+			delete tmp;
+			p = p->iNext;
+			}
+		
+		iFirstBlock = iCurrentBlock = NULL;
+		}
+	}
+
+//eof
+