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

234 lines
5.6 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using System.Runtime.CompilerServices;
namespace System
{
// Token: 0x02000661 RID: 1633
internal struct MonoEnumInfo
{
// Token: 0x06003E15 RID: 15893 RVA: 0x000D3378 File Offset: 0x000D1578
private MonoEnumInfo(MonoEnumInfo other)
{
this.utype = other.utype;
this.values = other.values;
this.names = other.names;
this.name_hash = other.name_hash;
}
// Token: 0x06003E17 RID: 15895
[MethodImpl(MethodImplOptions.InternalCall)]
private static extern void get_enum_info(Type enumType, out MonoEnumInfo info);
// Token: 0x17000B8A RID: 2954
// (get) Token: 0x06003E18 RID: 15896 RVA: 0x000D3408 File Offset: 0x000D1608
private static Hashtable Cache
{
get
{
if (MonoEnumInfo.cache == null)
{
MonoEnumInfo.cache = new Hashtable();
}
return MonoEnumInfo.cache;
}
}
// Token: 0x06003E19 RID: 15897 RVA: 0x000D3424 File Offset: 0x000D1624
internal static void GetInfo(Type enumType, out MonoEnumInfo info)
{
if (MonoEnumInfo.Cache.ContainsKey(enumType))
{
info = (MonoEnumInfo)MonoEnumInfo.cache[enumType];
return;
}
object obj = MonoEnumInfo.global_cache_monitor;
lock (obj)
{
if (MonoEnumInfo.global_cache.ContainsKey(enumType))
{
object obj2 = MonoEnumInfo.global_cache[enumType];
MonoEnumInfo.cache[enumType] = obj2;
info = (MonoEnumInfo)obj2;
return;
}
}
MonoEnumInfo.get_enum_info(enumType, out info);
IComparer comparer = null;
if (!(info.values is byte[]) && !(info.values is ushort[]) && !(info.values is uint[]) && !(info.values is ulong[]))
{
if (info.values is int[])
{
comparer = MonoEnumInfo.int_comparer;
}
else if (info.values is short[])
{
comparer = MonoEnumInfo.short_comparer;
}
else if (info.values is sbyte[])
{
comparer = MonoEnumInfo.sbyte_comparer;
}
else if (info.values is long[])
{
comparer = MonoEnumInfo.long_comparer;
}
}
Array.Sort(info.values, info.names, comparer);
if (info.names.Length > 50)
{
info.name_hash = new Hashtable(info.names.Length);
for (int i = 0; i < info.names.Length; i++)
{
info.name_hash[info.names[i]] = i;
}
}
MonoEnumInfo monoEnumInfo = new MonoEnumInfo(info);
object obj3 = MonoEnumInfo.global_cache_monitor;
lock (obj3)
{
MonoEnumInfo.global_cache[enumType] = monoEnumInfo;
}
}
// Token: 0x040018D3 RID: 6355
internal Type utype;
// Token: 0x040018D4 RID: 6356
internal Array values;
// Token: 0x040018D5 RID: 6357
internal string[] names;
// Token: 0x040018D6 RID: 6358
internal Hashtable name_hash;
// Token: 0x040018D7 RID: 6359
[ThreadStatic]
private static Hashtable cache;
// Token: 0x040018D8 RID: 6360
private static Hashtable global_cache = new Hashtable();
// Token: 0x040018D9 RID: 6361
private static object global_cache_monitor = new object();
// Token: 0x040018DA RID: 6362
internal static MonoEnumInfo.SByteComparer sbyte_comparer = new MonoEnumInfo.SByteComparer();
// Token: 0x040018DB RID: 6363
internal static MonoEnumInfo.ShortComparer short_comparer = new MonoEnumInfo.ShortComparer();
// Token: 0x040018DC RID: 6364
internal static MonoEnumInfo.IntComparer int_comparer = new MonoEnumInfo.IntComparer();
// Token: 0x040018DD RID: 6365
internal static MonoEnumInfo.LongComparer long_comparer = new MonoEnumInfo.LongComparer();
// Token: 0x02000662 RID: 1634
internal class SByteComparer : IComparer<sbyte>, IComparer
{
// Token: 0x06003E1B RID: 15899 RVA: 0x000D3638 File Offset: 0x000D1838
public int Compare(object x, object y)
{
sbyte b = (sbyte)x;
sbyte b2 = (sbyte)y;
return (int)((byte)b - (byte)b2);
}
// Token: 0x06003E1C RID: 15900 RVA: 0x000D3658 File Offset: 0x000D1858
public int Compare(sbyte ix, sbyte iy)
{
return (int)((byte)ix - (byte)iy);
}
}
// Token: 0x02000663 RID: 1635
internal class ShortComparer : IComparer<short>, IComparer
{
// Token: 0x06003E1E RID: 15902 RVA: 0x000D3668 File Offset: 0x000D1868
public int Compare(object x, object y)
{
short num = (short)x;
short num2 = (short)y;
return (int)((ushort)num - (ushort)num2);
}
// Token: 0x06003E1F RID: 15903 RVA: 0x000D3688 File Offset: 0x000D1888
public int Compare(short ix, short iy)
{
return (int)((ushort)ix - (ushort)iy);
}
}
// Token: 0x02000664 RID: 1636
internal class IntComparer : IComparer<int>, IComparer
{
// Token: 0x06003E21 RID: 15905 RVA: 0x000D3698 File Offset: 0x000D1898
public int Compare(object x, object y)
{
int num = (int)x;
int num2 = (int)y;
if (num == num2)
{
return 0;
}
if (num < num2)
{
return -1;
}
return 1;
}
// Token: 0x06003E22 RID: 15906 RVA: 0x000D36C8 File Offset: 0x000D18C8
public int Compare(int ix, int iy)
{
if (ix == iy)
{
return 0;
}
if (ix < iy)
{
return -1;
}
return 1;
}
}
// Token: 0x02000665 RID: 1637
internal class LongComparer : IComparer<long>, IComparer
{
// Token: 0x06003E24 RID: 15908 RVA: 0x000D36E8 File Offset: 0x000D18E8
public int Compare(object x, object y)
{
long num = (long)x;
long num2 = (long)y;
if (num == num2)
{
return 0;
}
if (num < num2)
{
return -1;
}
return 1;
}
// Token: 0x06003E25 RID: 15909 RVA: 0x000D3718 File Offset: 0x000D1918
public int Compare(long ix, long iy)
{
if (ix == iy)
{
return 0;
}
if (ix < iy)
{
return -1;
}
return 1;
}
}
}
}