2
using System.Collections;
4
namespace MonoDevelop.Projects.Utility
6
internal class DiffUtility
8
public static int GetAddedItems(IList original, IList changed, IList result)
10
return GetAddedItems(original, changed, result, Comparer.Default);
13
public static int GetAddedItems(IList original, IList changed, IList result, IComparer comparer)
16
if(changed != null && result != null) {
17
if(original == null) {
18
foreach(object item in changed) {
21
count = changed.Count;
24
foreach(object item in changed) {
25
if(!Contains(original, item, comparer)) {
35
public static int GetRemovedItems(IList original, IList changed, IList result)
37
return GetRemovedItems(original, changed, result, Comparer.Default);
40
public static int GetRemovedItems(IList original, IList changed, IList result, IComparer comparer)
42
return GetAddedItems(changed, original, result, comparer);
45
static bool Contains(IList list, object value, IComparer comparer)
47
foreach(object item in list) {
48
if(0 == comparer.Compare(item, value)) {
55
static public int Compare(IList a, IList b)
57
return Compare(a, b, Comparer.Default);
60
static public int Compare(IList a, IList b, IComparer comparer)
62
if (a == null || b == null) {
66
return (a == null) ? -1 : 1;
68
int limit = (a.Count < b.Count) ? a.Count : b.Count;
69
for(int i=0; i < limit; i++) {
70
if (a[i] is IComparable && b[i] is IComparable) {
71
int cmp = comparer.Compare(a[i], b[i]);
77
return a.Count - b.Count;
80
static public int Compare(SortedList a, SortedList b)
82
return Compare(a, b, Comparer.Default);
85
static public int Compare(SortedList a, SortedList b, IComparer comparer)
87
if (a == null || b == null) {
91
return (a == null) ? -1 : 1;
94
int limit = (a.Count < b.Count) ? a.Count : b.Count;
95
for(int i=0; i < limit; i++) {
96
if(0 != (cmp = comparer.Compare(a.GetByIndex(i), b.GetByIndex(i)))) {
100
return a.Count - b.Count;