crashanalysercmd/PerfToolsSharedLibraries/Engine/SymbianStructuresLib/Debug/Common/FileName/PlatformFileName.cs
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/crashanalysercmd/PerfToolsSharedLibraries/Engine/SymbianStructuresLib/Debug/Common/FileName/PlatformFileName.cs Thu Feb 11 15:50:58 2010 +0200
@@ -0,0 +1,229 @@
+/*
+* 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.Text;
+using System.Collections.Generic;
+using SymbianUtils;
+
+namespace SymbianStructuresLib.Debug.Common.FileName
+{
+ public class PlatformFileName
+ {
+ #region Static constructor
+ public static PlatformFileName New( PlatformFileName aCopy )
+ {
+ PlatformFileName ret = new PlatformFileName();
+ ret.FileNameInDevice = aCopy.FileNameInDevice;
+ ret.FileNameInHost = aCopy.FileNameInHost;
+ return ret;
+ }
+
+ public static PlatformFileName NewByHostName( string aFileName )
+ {
+ PlatformFileName ret = new PlatformFileName();
+
+ ret.FileNameInHost = aFileName;
+
+ // Seed the device file name based upon the host info
+ string justFileName = Path.GetFileName( aFileName );
+ ret.FileNameInDevice = Path.Combine( PlatformFileNameConstants.Device.KPathWildcardSysBin, justFileName );
+
+ return ret;
+ }
+
+ public static PlatformFileName NewByDeviceName( string aFileName )
+ {
+ PlatformFileName ret = new PlatformFileName();
+
+ ret.FileNameInDevice = aFileName;
+
+ // Seed the device file name based upon the host info
+ string justFileName = Path.GetFileName( ret.FileNameInDevice );
+ ret.FileNameInHost = Path.Combine( PlatformFileNameConstants.Host.KPathEpoc32ReleaseArmv5Urel, justFileName );
+
+ return ret;
+ }
+ #endregion
+
+ #region Constructors
+ private PlatformFileName()
+ {
+ }
+ #endregion
+
+ #region API
+ public bool Contains( string aText )
+ {
+ string text = aText.ToUpper();
+ bool ret = iFileNameInDevice.ToUpper().Contains( text ) ||
+ iFileNameInHost.ToUpper().Contains( text );
+ return ret;
+ }
+ #endregion
+
+ #region Properties
+ public bool ContainsWildcard
+ {
+ get { return iFileNameInDevice.StartsWith( PlatformFileNameConstants.Device.KPathWildcardRoot ); }
+ }
+
+ public string EitherFullNameButDevicePreferred
+ {
+ get
+ {
+ // Prefer the in-device file name if possible
+ string ret = iFileNameInDevice;
+ //
+ if ( string.IsNullOrEmpty( ret ) )
+ {
+ ret = iFileNameInHost;
+ if ( string.IsNullOrEmpty( ret ) )
+ {
+ ret = string.Empty;
+ }
+ }
+ //
+ return ret;
+ }
+ }
+
+ public string FileNameInDevice
+ {
+ get { return iFileNameInDevice; }
+ set
+ {
+ string name = value;
+ if ( name.Length < 2 )
+ {
+ throw new ArgumentException( "File name is invalid" );
+ }
+
+ // If the specified filename doesn't enclude a drive letter, then add one.
+ bool needsDrive = false;
+ if ( name.StartsWith( @"/" ) || name.StartsWith( @"\" ) )
+ {
+ needsDrive = true;
+ }
+ else if ( name[ 1 ] != ':' )
+ {
+ needsDrive = true;
+ }
+
+ if ( needsDrive )
+ {
+ StringBuilder fileName = new StringBuilder( name );
+ if ( fileName[ 0 ] != Path.DirectorySeparatorChar )
+ {
+ fileName.Insert( 0, @"\" );
+ }
+ fileName.Insert( 0, PlatformFileNameConstants.Device.KPathWildcardRoot );
+ iFileNameInDevice = string.Intern( fileName.ToString() );
+ }
+ else
+ {
+ iFileNameInDevice = string.Intern( name );
+ }
+ }
+ }
+
+ public string FileNameInHost
+ {
+ get { return iFileNameInHost; }
+ set
+ {
+ iFileNameInHost = string.Intern( value );
+ }
+ }
+ #endregion
+
+ #region From System.Object
+ public override int GetHashCode()
+ {
+ return iFileNameInDevice.GetHashCode();
+ }
+
+ public override string ToString()
+ {
+ return EitherFullNameButDevicePreferred;
+ }
+
+ public override bool Equals( object aObject )
+ {
+ bool ret = false;
+ //
+ if ( aObject is PlatformFileName )
+ {
+ PlatformFileName other = (PlatformFileName) aObject;
+
+ // These are the strings we'll compare - we'll assume exact comparison
+ // required by default...
+ string pathHostThis = this.FileNameInHost;
+ string pathHostOther = other.FileNameInHost;
+ string pathDeviceThis = this.FileNameInDevice;
+ string pathDeviceOther = other.FileNameInDevice;
+
+ // We must find out if this object (or aObject) contains a wildcard.
+ if ( this.ContainsWildcard || other.ContainsWildcard )
+ {
+ // Compare just the in-device paths, not the drives, since one or
+ // other of the drive letters is unknown.
+ pathDeviceThis = this.FileNameInDeviceWithoutRoot;
+ pathDeviceOther = other.FileNameInDeviceWithoutRoot;
+ }
+
+ // Now we can compare the two...
+ bool sameDevice = string.Compare( pathDeviceThis, pathDeviceOther, StringComparison.CurrentCultureIgnoreCase ) == 0;
+ bool sameHost = string.Compare( pathHostThis, pathHostOther, StringComparison.CurrentCultureIgnoreCase ) == 0;
+ //
+ ret = ( sameDevice || sameHost );
+ }
+ else
+ {
+ ret = base.Equals( aObject );
+ }
+ //
+ return ret;
+ }
+ #endregion
+
+ #region Internal methods
+ internal string FileNameInDeviceWithoutRoot
+ {
+ get
+ {
+ string ret = iFileNameInDevice;
+ //
+ if ( ret.Length > 2 )
+ {
+ if ( ret[ 1 ] == ':' )
+ {
+ ret = ret.Substring( 2 );
+ }
+ }
+ //
+ return ret;
+ }
+ }
+ #endregion
+
+ #region Data members
+ private string iFileNameInDevice = string.Empty;
+ private string iFileNameInHost = string.Empty;
+ #endregion
+ }
+}
\ No newline at end of file