39 lines
1.0 KiB
C#
39 lines
1.0 KiB
C#
using System.Collections.Generic;
|
|
using DotNetty.Common;
|
|
|
|
namespace dotNetty_kcp
|
|
{
|
|
public class CodecOutputList<T>:List<T>
|
|
{
|
|
|
|
const int DefaultInitialCapacity =16;
|
|
|
|
static readonly ThreadLocalPool<CodecOutputList<T>> Pool = new ThreadLocalPool<CodecOutputList<T>>(handle => new CodecOutputList<T>(handle));
|
|
|
|
readonly ThreadLocalPool.Handle returnHandle;
|
|
|
|
CodecOutputList(ThreadLocalPool.Handle returnHandle)
|
|
{
|
|
this.returnHandle = returnHandle;
|
|
}
|
|
|
|
public static CodecOutputList<T> NewInstance() => NewInstance(DefaultInitialCapacity);
|
|
|
|
public static CodecOutputList<T> NewInstance(int minCapacity)
|
|
{
|
|
CodecOutputList<T> ret = Pool.Take();
|
|
if (ret.Capacity < minCapacity)
|
|
{
|
|
ret.Capacity = minCapacity;
|
|
}
|
|
return ret;
|
|
|
|
}
|
|
|
|
public void Return()
|
|
{
|
|
this.Clear();
|
|
this.returnHandle.Release(this);
|
|
}
|
|
}
|
|
} |