using System.Collections.Generic;
using System.Text;
using System.Threading;
namespace Jint.Native.String
{
///
/// Helper to cache common data structures when manipulating strings.
///
internal class StringExecutionContext
{
private static readonly ThreadLocal _executionContext = new ThreadLocal(() => new StringExecutionContext());
private StringBuilder _stringBuilder;
private List _splitSegmentList;
private string[] _splitArray1;
private JsValue[] _callArray3;
private StringExecutionContext()
{
}
public StringBuilder GetStringBuilder(int capacity)
{
if (_stringBuilder == null)
{
_stringBuilder = new StringBuilder(capacity);
}
else
{
_stringBuilder.EnsureCapacity(capacity);
}
return _stringBuilder;
}
public List SplitSegmentList => _splitSegmentList = _splitSegmentList ?? new List();
public string[] SplitArray1 => _splitArray1 = _splitArray1 ?? new string[1];
public JsValue[] CallArray3 => _callArray3 = _callArray3 ?? new JsValue[3];
public static StringExecutionContext Current => _executionContext.Value;
}
}