Click here to Skip to main content
15,886,676 members
Articles / Programming Languages / C#

A Generic, Reusable Diff Algorithm in C# - II

Rate me:
Please Sign up or sign in to vote.
4.87/5 (132 votes)
10 Jun 2004Public Domain9 min read 613.9K   20.5K   329  
A reusable difference engine written in C#.
using System;
using System.IO;
using System.Collections;
using Diff;

namespace DiffCalcer
{
	public class TextLine : IComparable
	{
		public string Line;
		private int _hash;

		public TextLine(string str)
		{
			Line = str.Replace("\t","    ");
			_hash = str.GetHashCode();
		}
		#region IComparable Members

		public int CompareTo(object obj)
		{
			return _hash.CompareTo(((TextLine)obj)._hash);
		}

		#endregion
	}


	public class LineFile : IDiffList
	{
		private const int MaxLineLength = 1024;
		private ArrayList _lines;

		public LineFile(string fileName)
		{
			_lines = new ArrayList();
			using (StreamReader sr = new StreamReader(fileName)) 
			{
				String line;
				// Read and display lines from the file until the end of 
				// the file is reached.
				while ((line = sr.ReadLine()) != null) 
				{
					if (line.Length > MaxLineLength)
					{
						throw new InvalidOperationException(
							string.Format("File contains a line greater than {0} characters.",
							MaxLineLength.ToString()));
					}
					_lines.Add(new TextLine(line));
				}
			}

		}
		#region IDiffList Members

		public int Count()
		{
			return _lines.Count;
		}

		public IComparable GetByIndex(int index)
		{
			return (TextLine)_lines[index];
		}

		#endregion
	}
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under A Public Domain dedication


Written By
Chief Technology Officer
United States United States
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions