internal static IClrTypeCore GetTypeCore(Type type) { if (type != null) { #if NETFX_CORE Capstones.LuaExt.Assembly2Lua._SearchAssemblies.Add(type.GetTypeInfo().Assembly); #endif IClrTypeCore core = null; if (_TypeCoreCache.TryGetValue(type, out core)) { return(core); } if (type.IsGenericType() && type.ContainsGenericParameters()) { core = new ClrGenericTypeCore(type); } else { core = new ClrTypeCore(type); } _TypeCoreCache[type] = core; return(core); } return(null); }
public static ClrTypeWrapper GetFromPool(IClrTypeCore core) { #if ENABLE_OBJ_POOL return(Pool.GetFromPool(() => new ClrTypeWrapper(core), wrapper => wrapper.Init(core))); #else return(new ClrTypeWrapper(core)); #endif }
public void Init(IClrTypeCore core) { _Binding = this; BindingCore = core; if (core != null && core.BindingType != null) { _Binding = core.BindingType; } TypeObjectWrapper = ClrObjectWrapper.GetFromPool(BindingType, null); }
public void Init(object obj) { _Binding = null; BindingCore = null; if (obj != null) { BindingCore = ClrTypeCore.GetTypeCore(obj.GetType()); } Binding = obj; }
public void Init(object obj, Type type) { _Binding = null; BindingCore = null; if (type == null) { if (obj != null) { BindingCore = ClrTypeCore.GetTypeCore(obj.GetType()); } Binding = obj; } else { BindingCore = ClrTypeCore.GetTypeCore(type); if (type.IsInstanceOfType(obj)) { Binding = obj; } } }
internal static ClrGenericTypeCore GetGenericTypeCore(Type type, Dictionary <Types, ClrTypeCore> cache) { if (type != null) { { IClrTypeCore core = null; if (ClrTypeCore._TypeCoreCache.TryGetValue(type, out core)) { var rv = core as ClrGenericTypeCore; if (rv != null) { return(rv); } } } { var core = new ClrGenericTypeCore(type, cache); ClrTypeCore._TypeCoreCache[type] = core; return(core); } } return(null); }
protected internal ClrTypeCoreWithGeneric(Type ntype, Type[] gtypes, Dictionary <Types, ClrTypeCore> cache) { List <Type> types = new List <Type>(); if (ntype != null) { _NormalCore = ClrTypeCore.GetTypeCore(ntype); types.Add(ntype); } if (gtypes != null && gtypes.Length > 0) { if (gtypes.Length > 1) { _GenericCore = new GroupGenericTypeCore(gtypes, cache); } else { _GenericCore = ClrGenericTypeCore.GetGenericTypeCore(gtypes[0], cache); } types.AddRange(gtypes); } _GroupTypes = types.ToArray(); }
public ClrTypeWrapper(IClrTypeCore core) { Init(core); }