using System; using System.Reflection; namespace Prime31.Reflection { // Token: 0x02000021 RID: 33 public class CacheResolver { // Token: 0x060000C5 RID: 197 RVA: 0x00007D46 File Offset: 0x00005F46 public CacheResolver(MemberMapLoader memberMapLoader) { this._memberMapLoader = memberMapLoader; } // Token: 0x060000C6 RID: 198 RVA: 0x00007D64 File Offset: 0x00005F64 public static object getNewInstance(Type type) { CacheResolver.CtorDelegate ctorDelegate; object result; if (CacheResolver.constructorCache.tryGetValue(type, out ctorDelegate)) { result = ctorDelegate(); } else { ConstructorInfo constructorInfo = type.GetConstructor(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, null, Type.EmptyTypes, null); ctorDelegate = (() => constructorInfo.Invoke(null)); CacheResolver.constructorCache.add(type, ctorDelegate); result = ctorDelegate(); } return result; } // Token: 0x060000C7 RID: 199 RVA: 0x00007DD4 File Offset: 0x00005FD4 public SafeDictionary loadMaps(Type type) { SafeDictionary result; SafeDictionary safeDictionary; if (type == null || type == typeof(object)) { result = null; } else if (this._memberMapsCache.tryGetValue(type, out safeDictionary)) { result = safeDictionary; } else { safeDictionary = new SafeDictionary(); this._memberMapLoader(type, safeDictionary); this._memberMapsCache.add(type, safeDictionary); result = safeDictionary; } return result; } // Token: 0x060000C8 RID: 200 RVA: 0x00007E44 File Offset: 0x00006044 private static GetHandler createGetHandler(FieldInfo fieldInfo) { return (object instance) => fieldInfo.GetValue(instance); } // Token: 0x060000C9 RID: 201 RVA: 0x00007E74 File Offset: 0x00006074 private static SetHandler createSetHandler(FieldInfo fieldInfo) { SetHandler result; if (fieldInfo.IsInitOnly || fieldInfo.IsLiteral) { result = null; } else { result = delegate(object instance, object value) { fieldInfo.SetValue(instance, value); }; } return result; } // Token: 0x060000CA RID: 202 RVA: 0x00007ECC File Offset: 0x000060CC private static GetHandler createGetHandler(PropertyInfo propertyInfo) { MethodInfo getMethodInfo = propertyInfo.GetGetMethod(true); GetHandler result; if (getMethodInfo == null) { result = null; } else { result = ((object instance) => getMethodInfo.Invoke(instance, Type.EmptyTypes)); } return result; } // Token: 0x060000CB RID: 203 RVA: 0x00007F14 File Offset: 0x00006114 private static SetHandler createSetHandler(PropertyInfo propertyInfo) { MethodInfo setMethodInfo = propertyInfo.GetSetMethod(true); SetHandler result; if (setMethodInfo == null) { result = null; } else { result = delegate(object instance, object value) { setMethodInfo.Invoke(instance, new object[] { value }); }; } return result; } // Token: 0x04000051 RID: 81 private readonly MemberMapLoader _memberMapLoader; // Token: 0x04000052 RID: 82 private readonly SafeDictionary> _memberMapsCache = new SafeDictionary>(); // Token: 0x04000053 RID: 83 private static readonly SafeDictionary constructorCache = new SafeDictionary(); // Token: 0x02000022 RID: 34 // (Invoke) Token: 0x060000CE RID: 206 private delegate object CtorDelegate(); // Token: 0x02000023 RID: 35 public sealed class MemberMap { // Token: 0x060000D1 RID: 209 RVA: 0x00007F66 File Offset: 0x00006166 public MemberMap(PropertyInfo propertyInfo) { this.MemberInfo = propertyInfo; this.Type = propertyInfo.PropertyType; this.Getter = CacheResolver.createGetHandler(propertyInfo); this.Setter = CacheResolver.createSetHandler(propertyInfo); } // Token: 0x060000D2 RID: 210 RVA: 0x00007F9A File Offset: 0x0000619A public MemberMap(FieldInfo fieldInfo) { this.MemberInfo = fieldInfo; this.Type = fieldInfo.FieldType; this.Getter = CacheResolver.createGetHandler(fieldInfo); this.Setter = CacheResolver.createSetHandler(fieldInfo); } // Token: 0x04000054 RID: 84 public readonly MemberInfo MemberInfo; // Token: 0x04000055 RID: 85 public readonly Type Type; // Token: 0x04000056 RID: 86 public readonly GetHandler Getter; // Token: 0x04000057 RID: 87 public readonly SetHandler Setter; } } }