using System.Collections.Generic; using System.Text; using System.Threading; namespace Jint.Native.Array { /// /// Helper to cache common data structures needed in array access on a per thread basis. /// internal class ArrayExecutionContext { // cache key container for array iteration for less allocations private static readonly ThreadLocal _executionContext = new ThreadLocal(() => new ArrayExecutionContext()); private List _keyCache; private JsValue[] _callArray1; private JsValue[] _callArray3; private JsValue[] _callArray4; private StringBuilder _stringBuilder; private ArrayExecutionContext() { } public List KeyCache => _keyCache = _keyCache ?? new List(); public JsValue[] CallArray1 => _callArray1 = _callArray1 ?? new JsValue[1]; public JsValue[] CallArray3 => _callArray3 = _callArray3 ?? new JsValue[3]; public JsValue[] CallArray4 => _callArray4 = _callArray4 ?? new JsValue[4]; public StringBuilder StringBuilder => _stringBuilder = _stringBuilder ?? new StringBuilder(); public static ArrayExecutionContext Current => _executionContext.Value; } }