Pool
Provides a pool of used / recycled resources.
using AngleSharp.Parser.Css;
using System.Collections.Generic;
using System.Diagnostics;
using System.Text;
namespace AngleSharp
{
[DebuggerStepThrough]
internal static class Pool
{
private static readonly Stack<StringBuilder> _builder;
private static readonly Stack<CssSelectorConstructor> _selector;
private static readonly object _lock;
static Pool()
{
_builder = new Stack<StringBuilder>();
_selector = new Stack<CssSelectorConstructor>();
_lock = new object();
}
public static StringBuilder NewStringBuilder()
{
lock (_lock) {
if (_builder.Count != 0)
return _builder.Pop().Clear();
return new StringBuilder();
}
}
public static CssSelectorConstructor NewSelectorConstructor()
{
lock (_lock) {
if (_selector.Count != 0)
return _selector.Pop().Reset();
return new CssSelectorConstructor();
}
}
public static string ToPool(this StringBuilder sb)
{
lock (_lock) {
_builder.Push(sb);
}
return sb.ToString();
}
public static void ToPool(this CssSelectorConstructor ctor)
{
lock (_lock) {
_selector.Push(ctor);
}
}
}
}