A multi-types Object Pool implement with C#. Type as key value. NOT thread-safty.
using System;
using System.Collections.Generic;
namespace Elecelf.Utils
{
class ObjectPool
{
protected Dictionary<Type, Object> queues = new Dictionary<Type, Object>();
public int DefaultMaxCount = 10;
public bool Get<T>(out T value)
{
Object queue;
if (queues.TryGetValue(typeof(T), out queue))
{
return (queue as ObjectPoolQueue<T>).Get(out value);
}
else
{
value = default(T);
return false;
}
}
public bool Put<T>(T value)
{
Object queue;
if(queues.TryGetValue(typeof(T), out queue))
{
return (queue as ObjectPoolQueue<T>).Put(value);
}
else
{
ObjectPoolQueue<T> newQueue = new ObjectPoolQueue<T>();
queues.Add(typeof(T), newQueue);
return newQueue.Put(value);
}
}
}
class ObjectPoolQueue<T>
{
public int MaxCount = 10;
protected Queue<T> items = new Queue<T>();
public bool Get(out T item)
{
if(items.Count > 0)
{
item = items.Dequeue();
return true;
}
else
{
item = default(T);
return false;
}
}
public bool Put(T item)
{
if (items.Count >= MaxCount)
{
items.Enqueue(item);
return true;
}
else
{
return false;
}
}
}
}