⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dependences.cs

📁 SharpDevelop2.0.0 c#开发免费工具
💻 CS
字号:
//
// -*- C# -*-
//
// Author:         Roman Taranchenko
// Copyright:      (c) 2004 Roman Taranchenko
// Copying Policy: GNU General Public License
//

using System;
using System.Collections;
using System.IO;

namespace CPPBinding
{

	public interface IDependence 
	{
  
		string Name 
		{
			get;
		}
  
		DependenceTree DependsOn 
		{
			get;
		}

	 	DependenceTree Children 
		{
			get;
		}
  
		void Add(IDependence dependence);
  
		DateTime GetLastWriteTime();
	
		bool Exists
		{
			get;
		}
	
	 	bool Contains(IDependence dep);
	
 		bool Contains(string dep);
	
	}

	public class SourceFile: IDependence 
	{
  
		private string _name;
		private DependenceTree _dependences = new DependenceTree();
  
		public SourceFile(string name) 
		{
			_name = name;
		}
  
		public string Name 
		{
			get 
			{
				return _name;
			}
		}
  
		public DependenceTree Children 
		{
			get 
			{
				return _dependences;
			}
		}
  
		public DependenceTree DependsOn 
		{
			get 
			{
				DependenceTree listOfNames = new DependenceTree();
				FillListOfNames(this, listOfNames);
				return listOfNames;
			}
		}
  
		public void Add(IDependence dependence) 
		{
			_dependences.Add(dependence);
		}
  
		private static void FillListOfNames(IDependence dependence, DependenceTree list) 
		{
			foreach (IDependence dep in dependence.Children) 
			{
				list.Add(dep);
				FillListOfNames(dep, list);
			}
		}
  
		public DateTime GetLastWriteTime()
		{
			DateTime result = DateTime.MinValue;
			if (Exists)
			{
				result = File.GetLastWriteTime(_name);
				foreach (IDependence dep in _dependences)
				{
					DateTime dt = dep.GetLastWriteTime();
					if (dt.CompareTo(result) > 0)
					{
						result = dt;
					}
				}
			}
			return result;
		}
	
		public bool Exists
		{
			get
			{
				return File.Exists(_name);
			}
		}
	
		public override string ToString()
		{
			return _name;
		}

		public bool Contains(IDependence dep)
		{
			return Contains(dep.Name);
		}
	
		public bool Contains(string dep)
		{
			if (_name.Equals(dep)) {
				return true;
			}
			return _dependences.Contains(dep);
		}
	}

	public class DependenceTree: IEnumerable 
	{

		private SortedList _list;

		public DependenceTree() 
		{
			_list = new SortedList();
		}
  
		public void Add(IDependence value) 
		{
			if (!Contains(value)) 
			{
				_list.Add(value.Name, value);
			}
		}
  
		public IDependence Get(string name) 
		{
			return (IDependence) _list.GetByIndex(_list.IndexOfKey(name));
		}
  
		public IDependence Get(IDependence dep) 
		{
			return Get(dep.Name);
		}
  
		public bool Contains(IDependence dep) 
		{
			return Contains(dep.Name);
		}
  
		public bool Contains(string name) 
		{
			return _list.ContainsKey(name);
		}
  
		public IEnumerator GetEnumerator() 
		{
			return new DependenceTreeEnumerator(_list.GetEnumerator());
		}
  
	}

	class DependenceTreeEnumerator: IEnumerator 
	{
		private IDictionaryEnumerator _enum;
  
		public DependenceTreeEnumerator(IDictionaryEnumerator e) 
		{
			_enum = e;
		}
  
		public object Current 
		{
			get 
			{
				return ((DictionaryEntry)_enum.Current).Value;
			}
		}
  
		public bool MoveNext() 
		{
			return _enum.MoveNext();
		}
  
		public void Reset() 
		{
			_enum.Reset();
		}
	}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -