Files
2026-06-04 11:42:34 +02:00

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);
}
}