diff -r 000000000000 -r 818e61de6cd1 crashanalysercmd/PerfToolsSharedLibraries/Engine/SymbolLib/CodeSeg/Resolver/CodeSegResolverEntry.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/crashanalysercmd/PerfToolsSharedLibraries/Engine/SymbolLib/CodeSeg/Resolver/CodeSegResolverEntry.cs Thu Feb 11 15:50:58 2010 +0200 @@ -0,0 +1,220 @@ +/* +* Copyright (c) 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: +* +*/ +using System; +using System.IO; +using System.Collections.Generic; + +namespace SymbolLib.CodeSegDef +{ + public class CodeSegResolverEntry + { + #region Enumerations + public enum TBuildType + { + EReleaseTypeRelease = 0, + EReleaseTypeDebug + } + + public enum TSourceType + { + ESourceNotDefined = 0, + ESourceWasMapFile, + ESourceWasSymbolFile + } + #endregion + + #region Constructors & destructor + public CodeSegResolverEntry() + { + } + + public CodeSegResolverEntry( string aFileName ) + { + EnvironmentFileNameAndPath = aFileName; + ImageFileNameAndPath = Path.Combine( CodeSegResolver.KROMBinaryPath, Path.GetFileName( aFileName ) ).ToLower(); + } + + public CodeSegResolverEntry( string aEnvFileName, string aImageFileName ) + { + EnvironmentFileNameAndPath = aEnvFileName.ToLower(); + ImageFileNameAndPath = aImageFileName.ToLower(); + } + #endregion + + #region API + #endregion + + #region Properties + public TSourceType Source + { + get { return iSource; } + set { iSource = value; } + } + + public TBuildType BuildType + { + get { return iBuildType; } + set { iBuildType = value; } + } + + public string EnvironmentFileName + { + get { return Path.GetFileName( EnvironmentFileNameAndPath ); } + } + + public string EnvironmentFileNameAndPath + { + get { return iFileNameAndPath_InEnvironment; } + set + { + iFileNameAndPath_InEnvironment = value; + + // Try to identify the release type (build) based upon the + // filename directory information. We'll default to UREL. + if ( value.Length > 0 ) + { + iBuildType = BuildTypeByFileName( value ); + } + } + } + + public string ImageFileName + { + get + { + string ret = string.Empty; + string val = ImageFileNameAndPath; + // + if ( !string.IsNullOrEmpty( val ) ) + { + // Try to get rid of all file extensions + while ( ret == string.Empty ) + { + try + { + ret = Path.GetFileName( val ); + } + catch ( ArgumentException ) + { + if ( val.Length > 0 ) + { + val = val.Substring( 0, val.Length - 1 ); + } + else + { + break; + } + } + } + } + // + return ret; + } + } + + public string ImageFileNameAndPath + { + get { return iFileNameAndPath_InImage; } + set + { + iFileNameAndPath_InImage = value; + } + } + + public string ImageFileNameAndPathWithoutDrive + { + get + { + string withoutDrive = Path.GetDirectoryName( ImageFileNameAndPath ); + // + if ( withoutDrive.Length > 2 && withoutDrive[ 1 ] == ':' && withoutDrive[ 2 ] == '\\' ) + { + withoutDrive = withoutDrive.Substring( 2 ); + } + if ( withoutDrive.Length > 0 && withoutDrive[ withoutDrive.Length - 1 ] != Path.DirectorySeparatorChar ) + { + withoutDrive += Path.DirectorySeparatorChar; + } + // + withoutDrive += Path.GetFileName( ImageFileNameAndPath ); + return withoutDrive; + } + } + #endregion + + #region From System.Object + public override string ToString() + { + return ImageFileNameAndPath.ToLower(); + } + + public override bool Equals( object aObject ) + { + bool isEqual = false; + // + if ( aObject != null ) + { + if ( aObject is CodeSegResolverEntry ) + { + CodeSegResolverEntry otherEntry = aObject as CodeSegResolverEntry; + // + isEqual = ( otherEntry.ImageFileNameAndPathWithoutDrive.ToLower() == ImageFileNameAndPathWithoutDrive.ToLower() ); + } + } + // + return isEqual; + } + + public override int GetHashCode() + { + return ImageFileNameAndPath.GetHashCode(); + } + #endregion + + #region Internal methods + private static TBuildType BuildTypeByFileName( string aFileName ) + { + TBuildType ret = TBuildType.EReleaseTypeRelease; + string path = "UREL"; + try + { + path = Path.GetDirectoryName( aFileName ).ToUpper(); + } + finally + { + } + // + if ( path == "UDEB" ) + { + } + else + { + ret = TBuildType.EReleaseTypeRelease; + } + // + return ret; + } + #endregion + + #region Data members + private string iFileNameAndPath_InEnvironment = string.Empty; + private string iFileNameAndPath_InImage = string.Empty; + private TBuildType iBuildType = TBuildType.EReleaseTypeRelease; + private TSourceType iSource = TSourceType.ESourceNotDefined; + #endregion + } +}