diff -r 000000000000 -r 818e61de6cd1 crashanalysercmd/UI/Plugins/CAPluginCrashAnalyser/CommandLine/Files/CACmdLineFSEntityList.cs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/crashanalysercmd/UI/Plugins/CAPluginCrashAnalyser/CommandLine/Files/CACmdLineFSEntityList.cs Thu Feb 11 15:50:58 2010 +0200 @@ -0,0 +1,169 @@ +/* +* 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.Text; +using System.IO; +using System.Collections.Generic; +using CrashAnalyserEngine.Plugins; + +namespace CAPCrashAnalysis.CommandLine +{ + internal class CACmdLineFSEntityList : IComparer, IEnumerable where T : CACmdLineFSEntity, new() + { + #region Constructors + public CACmdLineFSEntityList() + { + } + #endregion + + #region API + public void Add( FileInfo aFile ) + { + T entry = new T(); + entry.File = aFile; + // + AddInSortedOrder( entry ); + } + + public void Add( DirectoryInfo aDir ) + { + T entry = new T(); + entry.Directory = aDir; + // + AddInSortedOrder( entry ); + } + + public void AddRange( FileInfo[] aFiles ) + { + foreach ( FileInfo file in aFiles ) + { + Add( file ); + } + } + + public bool Contains( string aFileName ) + { + CACmdLineFSEntity ret = this[ aFileName ]; + return ret != null; + } + + public void AddToAll( CACmdLineMessage aMessage ) + { + foreach ( CACmdLineFSEntity file in iFiles ) + { + file.Add( aMessage ); + } + } + + public T[] ToArray() + { + return iFiles.ToArray(); + } + #endregion + + #region Properties + public int Count + { + get { return iFiles.Count; } + } + + public T this[ int aIndex ] + { + get { return iFiles[ aIndex ]; } + } + + public T this[ string aFileName ] + { + get + { + T temp = new T(); + temp.File = new FileInfo( aFileName ); + // + int pos = iFiles.BinarySearch( temp, this ); + // + T ret = null; + if ( pos >= 0 ) + { + ret = iFiles[ pos ]; + } + // + return ret; + } + } + #endregion + + #region Internal methods + private void AddInSortedOrder( T aEntry ) + { + string fileName = aEntry.NameUC; + // + int pos = iFiles.BinarySearch( aEntry, this ); + if ( pos < 0 ) + { + pos = ~pos; + iFiles.Insert( pos, aEntry ); + } + else + { + throw new ArgumentException( "Specified file already exists: " + aEntry ); + } + } + #endregion + + #region Operators + public static implicit operator string[]( CACmdLineFSEntityList aList ) + { + List ret = new List(); + foreach ( T file in aList ) + { + ret.Add( file.Name ); + } + return ret.ToArray(); + } + #endregion + + #region From IEnumerable + public IEnumerator GetEnumerator() + { + foreach ( T file in iFiles ) + { + yield return file; + } + } + + System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() + { + foreach ( T file in iFiles ) + { + yield return file; + } + } + #endregion + + #region From IComparer + public int Compare( T aLeft, T aRight ) + { + int ret = aLeft.NameUC.CompareTo( aRight.NameUC ); + return ret; + } + #endregion + + #region Data members + private List iFiles = new List(); + #endregion + } +}