crashanalysercmd/Libraries/Engine/CrashDebuggerLib/Structures/KernelObjects/DObject.cs
changeset 0 818e61de6cd1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/crashanalysercmd/Libraries/Engine/CrashDebuggerLib/Structures/KernelObjects/DObject.cs	Thu Feb 11 15:50:58 2010 +0200
@@ -0,0 +1,287 @@
+/*
+* Copyright (c) 2004-2008 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: 
+*
+*/
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace CrashDebuggerLib.Structures.KernelObjects
+{
+    public class DObject : DBase
+    {
+        #region Enumerations
+        public enum TObjectType
+        {
+	        EThread=0,
+	        EProcess,
+	        EChunk,
+	        ELibrary,
+	        ESemaphore,
+	        EMutex,
+	        ETimer,
+	        EServer,
+	        ESession,
+	        ELogicalDevice,
+	        EPhysicalDevice,
+	        ELogicalChannel,
+	        EChangeNotifier,
+	        EUndertaker,
+	        EMsgQueue,	
+	        EPropertyRef,
+	        ECondVar,
+	        ENumObjectTypes,	// number of DObject-derived types
+	        EObjectTypeAny=-1
+        }
+        #endregion
+
+        #region Constructors
+        public DObject( CrashDebuggerInfo aCrashDebugger, TObjectType aType )
+            : base( aCrashDebugger )
+        {
+            iType = aType;
+        }
+        #endregion
+
+        #region API
+        public static string AsClassName( TObjectType aType )
+        {
+            string ret = "Unknown";
+            //
+            switch ( aType )
+            {
+                case DObject.TObjectType.EThread:
+                    ret = "DThread";
+                    break;
+                case DObject.TObjectType.EProcess:
+                    ret = "DProcess";
+                    break;
+                case DObject.TObjectType.EChunk:
+                    ret = "DChunk";
+                    break;
+                case DObject.TObjectType.ELibrary:
+                    ret = "DLibrary";
+                    break;
+                case DObject.TObjectType.ESemaphore:
+                    ret = "DSemaphore";
+                    break;
+                case DObject.TObjectType.EMutex:
+                    ret = "DMutex";
+                    break;
+                case DObject.TObjectType.ETimer:
+                    ret = "DTimer";
+                    break;
+                case DObject.TObjectType.EServer:
+                    ret = "DServer";
+                    break;
+                case DObject.TObjectType.ESession:
+                    ret = "DSession";
+                    break;
+                case DObject.TObjectType.ELogicalDevice:
+                    ret = "DLogicalDevice";
+                    break;
+                case DObject.TObjectType.EPhysicalDevice:
+                    ret = "DPhysicalDevice";
+                    break;
+                case DObject.TObjectType.ELogicalChannel:
+                    ret = "DLogicalChannel";
+                    break;
+                case DObject.TObjectType.EChangeNotifier:
+                    ret = "DChangeNotifier";
+                    break;
+                case DObject.TObjectType.EUndertaker:
+                    ret = "DUndertaker";
+                    break;
+                case DObject.TObjectType.EMsgQueue:
+                    ret = "DMsgQueue";
+                    break;
+                case DObject.TObjectType.EPropertyRef:
+                    ret = "DPropertyRef";
+                    break;
+                case DObject.TObjectType.ECondVar:
+                    ret = "DCondVar";
+                    break;
+                default:
+                    break;
+            }
+
+            return ret;
+        }
+
+        public static string AsTypeDescription( TObjectType aType )
+        {
+            string ret = "Unknown";
+            //
+            switch ( aType )
+            {
+                case DObject.TObjectType.EThread:
+                    ret = "Thread";
+                    break;
+                case DObject.TObjectType.EProcess:
+                    ret = "Process";
+                    break;
+                case DObject.TObjectType.EChunk:
+                    ret = "Chunk";
+                    break;
+                case DObject.TObjectType.ELibrary:
+                    ret = "Library";
+                    break;
+                case DObject.TObjectType.ESemaphore:
+                    ret = "Semaphore";
+                    break;
+                case DObject.TObjectType.EMutex:
+                    ret = "Mutex";
+                    break;
+                case DObject.TObjectType.ETimer:
+                    ret = "Timer";
+                    break;
+                case DObject.TObjectType.EServer:
+                    ret = "Server";
+                    break;
+                case DObject.TObjectType.ESession:
+                    ret = "Session";
+                    break;
+                case DObject.TObjectType.ELogicalDevice:
+                    ret = "Logical Device";
+                    break;
+                case DObject.TObjectType.EPhysicalDevice:
+                    ret = "Physical Device";
+                    break;
+                case DObject.TObjectType.ELogicalChannel:
+                    ret = "Logical Channel";
+                    break;
+                case DObject.TObjectType.EChangeNotifier:
+                    ret = "Change Notifier";
+                    break;
+                case DObject.TObjectType.EUndertaker:
+                    ret = "Undertaker";
+                    break;
+                case DObject.TObjectType.EMsgQueue:
+                    ret = "Message Queue";
+                    break;
+                case DObject.TObjectType.EPropertyRef:
+                    ret = "Property Ref";
+                    break;
+                case DObject.TObjectType.ECondVar:
+                    ret = "Condition Variable";
+                    break;
+                default:
+                    break;
+            }
+
+            return ret;
+        }
+        #endregion
+
+        #region Properties
+        public TObjectType Type
+        {
+            get { return iType; }
+        }
+
+        public uint VTable
+        {
+            get { return iVTable; }
+            set { iVTable = value; }
+        }
+
+        public int AccessCount
+        {
+            get { return iAccessCount; }
+            set { iAccessCount = value; }
+        }
+
+        public uint OwnerAddress
+        {
+            get { return iOwnerAddress; }
+            set { iOwnerAddress = value; }
+        }
+
+        public DObject Owner
+        {
+            get
+            {
+                DObject ret = CrashDebugger.ObjectByAddress( OwnerAddress );
+                return ret;
+            }
+        }
+
+        public string Name
+        {
+            get { return iName; }
+            set { iName = value; }
+        }
+
+        public string ClassName
+        {
+            get
+            {
+                string ret = AsClassName( iType );
+                return ret;
+            }
+        }
+
+        public string TypeDescription
+        {
+            get
+            {
+                string ret = AsTypeDescription( iType );
+                return ret;
+            }
+        }
+
+        public bool Tagged
+        {
+            get { return iTagged; }
+            set { iTagged = value; }
+        }
+        #endregion
+
+        #region Internal methods
+        #endregion
+
+        #region Internal constants
+        #endregion
+
+        #region From DBase
+        public override string ToClipboard()
+        {
+            StringBuilder ret = new StringBuilder();
+            //
+            ret.Append( TypeDescription.ToUpper() + " [" + Name + "] " + base.ToClipboard() );
+            ret.AppendFormat( " VTable: 0x{0:x8} Owner: 0x{1:x8},  AccessCount: {2}", VTable, OwnerAddress, AccessCount );
+            //
+            return ret.ToString();
+        }
+        #endregion
+
+        #region From System.Object
+        public override string ToString()
+        {
+            return Name;
+        }
+        #endregion
+
+        #region Data members
+        private readonly TObjectType iType;
+        private uint iVTable = 0;
+        private int iAccessCount = 0;
+        private uint iOwnerAddress = 0;
+        private string iName = string.Empty;
+        private bool iTagged = true;
+        #endregion
+    }
+}