231 lines
5.0 KiB
C#
231 lines
5.0 KiB
C#
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);
|
|
}
|
|
}
|