117 lines
3.0 KiB
C#
117 lines
3.0 KiB
C#
using System;
|
|
|
|
namespace Mono.Globalization.Unicode
|
|
{
|
|
// Token: 0x0200007E RID: 126
|
|
internal class CodePointIndexer
|
|
{
|
|
// Token: 0x06000789 RID: 1929 RVA: 0x00017D80 File Offset: 0x00015F80
|
|
public CodePointIndexer(int[] starts, int[] ends, int defaultIndex, int defaultCP)
|
|
{
|
|
this.defaultIndex = defaultIndex;
|
|
this.defaultCP = defaultCP;
|
|
this.ranges = new CodePointIndexer.TableRange[starts.Length];
|
|
for (int i = 0; i < this.ranges.Length; i++)
|
|
{
|
|
this.ranges[i] = new CodePointIndexer.TableRange(starts[i], ends[i], (i != 0) ? (this.ranges[i - 1].IndexStart + this.ranges[i - 1].Count) : 0);
|
|
}
|
|
for (int j = 0; j < this.ranges.Length; j++)
|
|
{
|
|
this.TotalCount += this.ranges[j].Count;
|
|
}
|
|
}
|
|
|
|
// Token: 0x0600078A RID: 1930 RVA: 0x00017E50 File Offset: 0x00016050
|
|
public static Array CompressArray(Array source, Type type, CodePointIndexer indexer)
|
|
{
|
|
int num = 0;
|
|
for (int i = 0; i < indexer.ranges.Length; i++)
|
|
{
|
|
num += indexer.ranges[i].Count;
|
|
}
|
|
Array array = Array.CreateInstance(type, num);
|
|
for (int j = 0; j < indexer.ranges.Length; j++)
|
|
{
|
|
Array.Copy(source, indexer.ranges[j].Start, array, indexer.ranges[j].IndexStart, indexer.ranges[j].Count);
|
|
}
|
|
return array;
|
|
}
|
|
|
|
// Token: 0x0600078B RID: 1931 RVA: 0x00017EE8 File Offset: 0x000160E8
|
|
public int ToIndex(int cp)
|
|
{
|
|
for (int i = 0; i < this.ranges.Length; i++)
|
|
{
|
|
if (cp < this.ranges[i].Start)
|
|
{
|
|
return this.defaultIndex;
|
|
}
|
|
if (cp < this.ranges[i].End)
|
|
{
|
|
return cp - this.ranges[i].Start + this.ranges[i].IndexStart;
|
|
}
|
|
}
|
|
return this.defaultIndex;
|
|
}
|
|
|
|
// Token: 0x0600078C RID: 1932 RVA: 0x00017F70 File Offset: 0x00016170
|
|
public int ToCodePoint(int i)
|
|
{
|
|
for (int j = 0; j < this.ranges.Length; j++)
|
|
{
|
|
if (i < this.ranges[j].IndexStart)
|
|
{
|
|
return this.defaultCP;
|
|
}
|
|
if (i < this.ranges[j].IndexEnd)
|
|
{
|
|
return i - this.ranges[j].IndexStart + this.ranges[j].Start;
|
|
}
|
|
}
|
|
return this.defaultCP;
|
|
}
|
|
|
|
// Token: 0x04000116 RID: 278
|
|
private readonly CodePointIndexer.TableRange[] ranges;
|
|
|
|
// Token: 0x04000117 RID: 279
|
|
public readonly int TotalCount;
|
|
|
|
// Token: 0x04000118 RID: 280
|
|
private int defaultIndex;
|
|
|
|
// Token: 0x04000119 RID: 281
|
|
private int defaultCP;
|
|
|
|
// Token: 0x0200007F RID: 127
|
|
[Serializable]
|
|
internal struct TableRange
|
|
{
|
|
// Token: 0x0600078D RID: 1933 RVA: 0x00017FF8 File Offset: 0x000161F8
|
|
public TableRange(int start, int end, int indexStart)
|
|
{
|
|
this.Start = start;
|
|
this.End = end;
|
|
this.Count = this.End - this.Start;
|
|
this.IndexStart = indexStart;
|
|
this.IndexEnd = this.IndexStart + this.Count;
|
|
}
|
|
|
|
// Token: 0x0400011A RID: 282
|
|
public readonly int Start;
|
|
|
|
// Token: 0x0400011B RID: 283
|
|
public readonly int End;
|
|
|
|
// Token: 0x0400011C RID: 284
|
|
public readonly int Count;
|
|
|
|
// Token: 0x0400011D RID: 285
|
|
public readonly int IndexStart;
|
|
|
|
// Token: 0x0400011E RID: 286
|
|
public readonly int IndexEnd;
|
|
}
|
|
}
|
|
}
|