using System; using System.Collections; namespace System.Text.RegularExpressions { // Token: 0x020002D3 RID: 723 internal class IntervalCollection : ICollection, IEnumerable { // Token: 0x06001A4F RID: 6735 RVA: 0x0005F3E0 File Offset: 0x0005D5E0 public IntervalCollection() { this.intervals = new ArrayList(); } // Token: 0x1700081B RID: 2075 public Interval this[int i] { get { return (Interval)this.intervals[i]; } set { this.intervals[i] = value; } } // Token: 0x06001A52 RID: 6738 RVA: 0x0005F41C File Offset: 0x0005D61C public void Add(Interval i) { this.intervals.Add(i); } // Token: 0x06001A53 RID: 6739 RVA: 0x0005F430 File Offset: 0x0005D630 public void Clear() { this.intervals.Clear(); } // Token: 0x06001A54 RID: 6740 RVA: 0x0005F440 File Offset: 0x0005D640 public void Sort() { this.intervals.Sort(); } // Token: 0x06001A55 RID: 6741 RVA: 0x0005F450 File Offset: 0x0005D650 public void Normalize() { this.intervals.Sort(); int i = 0; while (i < this.intervals.Count - 1) { Interval interval = (Interval)this.intervals[i]; Interval interval2 = (Interval)this.intervals[i + 1]; if (!interval.IsDisjoint(interval2) || interval.IsAdjacent(interval2)) { interval.Merge(interval2); this.intervals[i] = interval; this.intervals.RemoveAt(i + 1); } else { i++; } } } // Token: 0x06001A56 RID: 6742 RVA: 0x0005F4F4 File Offset: 0x0005D6F4 public IntervalCollection GetMetaCollection(IntervalCollection.CostDelegate cost_del) { IntervalCollection intervalCollection = new IntervalCollection(); this.Normalize(); this.Optimize(0, this.Count - 1, intervalCollection, cost_del); intervalCollection.intervals.Sort(); return intervalCollection; } // Token: 0x06001A57 RID: 6743 RVA: 0x0005F52C File Offset: 0x0005D72C private void Optimize(int begin, int end, IntervalCollection meta, IntervalCollection.CostDelegate cost_del) { Interval interval; interval.contiguous = false; int num = -1; int num2 = -1; double num3 = 0.0; for (int i = begin; i <= end; i++) { interval.low = this[i].low; double num4 = 0.0; for (int j = i; j <= end; j++) { interval.high = this[j].high; num4 += cost_del(this[j]); double num5 = cost_del(interval); if (num5 < num4 && num4 > num3) { num = i; num2 = j; num3 = num4; } } } if (num < 0) { for (int k = begin; k <= end; k++) { meta.Add(this[k]); } } else { interval.low = this[num].low; interval.high = this[num2].high; meta.Add(interval); if (num > begin) { this.Optimize(begin, num - 1, meta, cost_del); } if (num2 < end) { this.Optimize(num2 + 1, end, meta, cost_del); } } } // Token: 0x1700081C RID: 2076 // (get) Token: 0x06001A58 RID: 6744 RVA: 0x0005F67C File Offset: 0x0005D87C public int Count { get { return this.intervals.Count; } } // Token: 0x1700081D RID: 2077 // (get) Token: 0x06001A59 RID: 6745 RVA: 0x0005F68C File Offset: 0x0005D88C public bool IsSynchronized { get { return false; } } // Token: 0x1700081E RID: 2078 // (get) Token: 0x06001A5A RID: 6746 RVA: 0x0005F690 File Offset: 0x0005D890 public object SyncRoot { get { return this.intervals; } } // Token: 0x06001A5B RID: 6747 RVA: 0x0005F698 File Offset: 0x0005D898 public void CopyTo(Array array, int index) { foreach (object obj in this.intervals) { Interval interval = (Interval)obj; if (index > array.Length) { break; } array.SetValue(interval, index++); } } // Token: 0x06001A5C RID: 6748 RVA: 0x0005F724 File Offset: 0x0005D924 public IEnumerator GetEnumerator() { return new IntervalCollection.Enumerator(this.intervals); } // Token: 0x0400159C RID: 5532 private ArrayList intervals; // Token: 0x020002D4 RID: 724 private class Enumerator : IEnumerator { // Token: 0x06001A5D RID: 6749 RVA: 0x0005F734 File Offset: 0x0005D934 public Enumerator(IList list) { this.list = list; this.Reset(); } // Token: 0x1700081F RID: 2079 // (get) Token: 0x06001A5E RID: 6750 RVA: 0x0005F74C File Offset: 0x0005D94C public object Current { get { if (this.ptr >= this.list.Count) { throw new InvalidOperationException(); } return this.list[this.ptr]; } } // Token: 0x06001A5F RID: 6751 RVA: 0x0005F77C File Offset: 0x0005D97C public bool MoveNext() { if (this.ptr > this.list.Count) { throw new InvalidOperationException(); } return ++this.ptr < this.list.Count; } // Token: 0x06001A60 RID: 6752 RVA: 0x0005F7C4 File Offset: 0x0005D9C4 public void Reset() { this.ptr = -1; } // Token: 0x0400159D RID: 5533 private IList list; // Token: 0x0400159E RID: 5534 private int ptr; } // Token: 0x0200031A RID: 794 // (Invoke) Token: 0x06001C41 RID: 7233 public delegate double CostDelegate(Interval i); } }