Jsm.Control.ProcessedJumps.cs 922 B

123456789101112131415161718192021222324252627282930313233
  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. public static partial class Control
  9. {
  10. private sealed class ProcessedJumps
  11. {
  12. private readonly HashSet<IJumpToInstruction> _processed = new HashSet<IJumpToInstruction>();
  13. public ProcessedJumps()
  14. {
  15. }
  16. public Boolean TryProcess(IJumpToInstruction jmp)
  17. {
  18. return _processed.Add(jmp);
  19. }
  20. public void Process(IJumpToInstruction jmp)
  21. {
  22. if (!_processed.Add(jmp))
  23. throw new InvalidProgramException($"The jump instruction ({jmp}) has already been processed.");
  24. }
  25. }
  26. }
  27. }
  28. }