Example #1
0
 public override void Do(RamMachineCommand command, IRamMachine ram)
 {
     RamMachineHelper.DoWithDeepLv(command.Argument, (ramEl, val) =>
     {
         ramEl.Set(0, func(ramEl.Get(0), val));
     }, ram);
 }
Example #2
0
 public override void Do(RamMachineCommand command, IRamMachine ram)
 {
     if (func(ram.Get(0)))
     {
         ram.Jump(command.Argument);
     }
 }
Example #3
0
            public override void Do(RamMachineCommand command, IRamMachine ram)
            {
                var splited = RamMachineHelper.SplitToPreArgument(command.Argument);
                int val     = int.Parse(splited.argument);

                switch (splited.pre)
                {
                case null: ram.Set(val, ram.Get(0)); break;

                case '*': ram.Set((int)ram.Get((int)val), ram.Get(0)); break;
                }
            }
        public static void Invoke(RamMachineCommand command, IRamMachine ram)
        {
            if (ram is null)
            {
                throw new ArgumentNullException(nameof(ram));
            }

            try
            {
                if (command.Type.EndsWith(":"))
                {
                    labelCommand.Do(command, ram);
                }
                else
                {
                    commands[command.Type].Do(command, ram);
                }
            }

            catch (Exception exception) when(!(exception is RamMachineRuntimeException))
            {
                throw new RamMachineRuntimeException(command.Line, $"Unexpected exception had occured during runtime ({command})", exception);
            }
        }
 public void Invoke(IRamMachine ram)
 {
     RamMachineController.Invoke(this, ram);
 }
Example #6
0
 public abstract void Do(RamMachineCommand command, IRamMachine ram);
Example #7
0
 public override void Do(RamMachineCommand command, IRamMachine ram)
 {
     RamMachineHelper.DoWithDeepLv(command.Argument, (ramEl, val) => ramEl.Write(val), ram);
 }
Example #8
0
 public override void Do(RamMachineCommand command, IRamMachine ram)
 {
     ram.PushLabel(command.Type.Substring(0, command.Type.Length - 1));
 }
Example #9
0
 public override void Do(RamMachineCommand command, IRamMachine ram)
 {
     ram.Jump(command.Argument);
 }
Example #10
0
 public override void Do(RamMachineCommand command, IRamMachine ram)
 {
     ram.Halt();
 }
Example #11
0
        public static void DoWithDeepLv(string argument, Action <IRamMachine, long> action, IRamMachine ram)
        {
            var splited = SplitToPreArgument(argument);
            int value   = int.Parse(splited.argument);

            switch (splited.pre)
            {
            case '=': action(ram, value); break;

            case null: action(ram, ram.Get(value)); break;

            case '^':
            case '*': action(ram, ram.Get((int)ram.Get((int)value))); break;
            }
        }