Files

201 lines
5.6 KiB
C#

using System;
using System.Collections.Generic;
namespace Zenject.Internal
{
public static class ZenPools
{
#if ZEN_INTERNAL_NO_POOLS
public static InjectContext SpawnInjectContext(DiContainer container, Type memberType)
{
return new InjectContext(container, memberType);
}
public static void DespawnInjectContext(InjectContext context)
{
}
public static List<T> SpawnList<T>()
{
return new List<T>();
}
public static void DespawnList<T>(List<T> list)
{
}
public static void DespawnArray<T>(T[] arr)
{
}
public static T[] SpawnArray<T>(int length)
{
return new T[length];
}
public static HashSet<T> SpawnHashSet<T>()
{
return new HashSet<T>();
}
public static Dictionary<TKey, TValue> SpawnDictionary<TKey, TValue>()
{
return new Dictionary<TKey, TValue>();
}
public static void DespawnDictionary<TKey, TValue>(Dictionary<TKey, TValue> dictionary)
{
}
public static void DespawnHashSet<T>(HashSet<T> set)
{
}
public static LookupId SpawnLookupId(IProvider provider, BindingId bindingId)
{
return new LookupId(provider, bindingId);
}
public static void DespawnLookupId(LookupId lookupId)
{
}
public static BindInfo SpawnBindInfo()
{
return new BindInfo();
}
public static void DespawnBindInfo(BindInfo bindInfo)
{
}
public static BindStatement SpawnStatement()
{
return new BindStatement();
}
public static void DespawnStatement(BindStatement statement)
{
}
#else
static readonly StaticMemoryPool<InjectContext> _contextPool = new StaticMemoryPool<InjectContext>();
static readonly StaticMemoryPool<LookupId> _lookupIdPool = new StaticMemoryPool<LookupId>();
static readonly StaticMemoryPool<BindInfo> _bindInfoPool = new StaticMemoryPool<BindInfo>();
static readonly StaticMemoryPool<BindStatement> _bindStatementPool = new StaticMemoryPool<BindStatement>();
public static HashSet<T> SpawnHashSet<T>()
{
return HashSetPool<T>.Instance.Spawn();
}
public static Dictionary<TKey, TValue> SpawnDictionary<TKey, TValue>()
{
return DictionaryPool<TKey, TValue>.Instance.Spawn();
}
public static BindStatement SpawnStatement()
{
return _bindStatementPool.Spawn();
}
public static void DespawnStatement(BindStatement statement)
{
statement.Reset();
_bindStatementPool.Despawn(statement);
}
public static BindInfo SpawnBindInfo()
{
return _bindInfoPool.Spawn();
}
public static void DespawnBindInfo(BindInfo bindInfo)
{
bindInfo.Reset();
_bindInfoPool.Despawn(bindInfo);
}
public static void DespawnDictionary<TKey, TValue>(Dictionary<TKey, TValue> dictionary)
{
DictionaryPool<TKey, TValue>.Instance.Despawn(dictionary);
}
public static void DespawnHashSet<T>(HashSet<T> set)
{
HashSetPool<T>.Instance.Despawn(set);
}
public static LookupId SpawnLookupId(IProvider provider, BindingId bindingId)
{
var lookupId = _lookupIdPool.Spawn();
lookupId.Provider = provider;
lookupId.BindingId = bindingId;
return lookupId;
}
public static void DespawnLookupId(LookupId lookupId)
{
lookupId.Reset();
_lookupIdPool.Despawn(lookupId);
}
public static List<T> SpawnList<T>()
{
return ListPool<T>.Instance.Spawn();
}
public static void DespawnList<T>(List<T> list)
{
ListPool<T>.Instance.Despawn(list);
}
public static void DespawnArray<T>(T[] arr)
{
ArrayPool<T>.GetPool(arr.Length).Despawn(arr);
}
public static T[] SpawnArray<T>(int length)
{
return ArrayPool<T>.GetPool(length).Spawn();
}
public static InjectContext SpawnInjectContext(DiContainer container, Type memberType)
{
var context = _contextPool.Spawn();
context.Container = container;
context.MemberType = memberType;
return context;
}
public static void DespawnInjectContext(InjectContext context)
{
context.Reset();
_contextPool.Despawn(context);
}
#endif
public static InjectContext SpawnInjectContext(
DiContainer container, InjectableInfo injectableInfo, InjectContext currentContext,
object targetInstance, Type targetType, object concreteIdentifier)
{
var context = SpawnInjectContext(container, injectableInfo.MemberType);
context.ObjectType = targetType;
context.ParentContext = currentContext;
context.ObjectInstance = targetInstance;
context.Identifier = injectableInfo.Identifier;
context.MemberName = injectableInfo.MemberName;
context.Optional = injectableInfo.Optional;
context.SourceType = injectableInfo.SourceType;
context.FallBackValue = injectableInfo.DefaultValue;
context.ConcreteIdentifier = concreteIdentifier;
return context;
}
}
}