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