ArrayExecutionContext.cs 1.1 KB

12345678910111213141516171819202122232425262728293031
  1. using System.Collections.Generic;
  2. using System.Threading;
  3. namespace Jint.Native.Array
  4. {
  5. /// <summary>
  6. /// Helper to cache common data structures needed in array access on a per thread basis.
  7. /// </summary>
  8. internal class ArrayExecutionContext
  9. {
  10. // cache key container for array iteration for less allocations
  11. private static readonly ThreadLocal<ArrayExecutionContext> _executionContext = new ThreadLocal<ArrayExecutionContext>(() => new ArrayExecutionContext());
  12. private List<uint> _keyCache;
  13. private JsValue[] _callArray1;
  14. private JsValue[] _callArray3;
  15. private JsValue[] _callArray4;
  16. private ArrayExecutionContext()
  17. {
  18. }
  19. public List<uint> KeyCache => _keyCache = _keyCache ?? new List<uint>();
  20. public JsValue[] CallArray1 => _callArray1 = _callArray1 ?? new JsValue[1];
  21. public JsValue[] CallArray3 => _callArray3 = _callArray3 ?? new JsValue[3];
  22. public JsValue[] CallArray4 => _callArray4 = _callArray4 ?? new JsValue[4];
  23. public static ArrayExecutionContext Current => _executionContext.Value;
  24. }
  25. }