Jsm.Control.ProcessedJumps.cs 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. using OpenVIII.Fields.Scripts.Instructions;
  2. using System;
  3. using System.Collections.Generic;
  4. namespace OpenVIII.Fields.Scripts
  5. {
  6. public static partial class Jsm
  7. {
  8. #region Classes
  9. public static partial class Control
  10. {
  11. #region Classes
  12. private sealed class ProcessedJumps
  13. {
  14. #region Fields
  15. private readonly HashSet<IJumpToInstruction> _processed = new HashSet<IJumpToInstruction>();
  16. #endregion Fields
  17. #region Constructors
  18. public ProcessedJumps()
  19. {
  20. }
  21. #endregion Constructors
  22. #region Methods
  23. public void Process(IJumpToInstruction jmp)
  24. {
  25. if (!_processed.Add(jmp))
  26. throw new InvalidProgramException($"The jump instruction ({jmp}) has already been processed.");
  27. }
  28. public bool TryProcess(IJumpToInstruction jmp) => _processed.Add(jmp);
  29. #endregion Methods
  30. }
  31. #endregion Classes
  32. }
  33. #endregion Classes
  34. }
  35. }