public Delegate cacheFunction(Type deletype, Delegate dele)
{
if (dele == null)
{
Delegate v = null;
Dictionary<Type, Delegate> caches = null;
if (callthis != null)
{
if (callthis.deles.TryGetValue(function, out caches))
{
caches.TryGetValue(deletype, out v);
}
}
else
{
if (calltype.deles.TryGetValue(function, out caches))
{
caches.TryGetValue(deletype, out v);
}
}
return v;
}
else
{
Dictionary<Type, Delegate> caches = null;
if (callthis != null)
{
if (!callthis.deles.TryGetValue(function, out caches))
{
caches = new Dictionary<Type, Delegate>();
callthis.deles[function] = caches;
}
caches[deletype] = dele;
}
else
{
if (!calltype.deles.TryGetValue(function, out caches))
{
caches = new Dictionary<Type, Delegate>();
calltype.deles[function] = caches;
}
caches[deletype] = dele;
}
return dele;
}
}
}