Advertisement
Guest User

Untitled

a guest
Jan 29th, 2020
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.53 KB | None | 0 0
  1. //
  2. // Created by qnbhd on 29.01.2020.
  3. //
  4.  
  5. #ifndef ANASTASIA_COMMANDSET_HPP
  6. #define ANASTASIA_COMMANDSET_HPP
  7.  
  8. #include "Set.hpp"
  9.  
  10. typedef int (*function)(int* op1, int * op2);
  11.  
  12. class CommandFunctor {
  13. private:
  14.     function worker;
  15.     std::string nameWorker;
  16.     int * leftOperand;
  17.     int * rightOperand;
  18. public:
  19.     CommandFunctor (function func, const std::string& nameOf, int * leftA, int * rightA) :
  20.             worker(func),
  21.             nameWorker (nameOf),
  22.             leftOperand(leftA),
  23.             rightOperand(rightA)
  24.     {}
  25.  
  26.     ~CommandFunctor() {
  27.         delete leftOperand;
  28.         delete rightOperand;
  29.     };
  30.  
  31.     virtual void operator()(){
  32.         *rightOperand = worker (leftOperand, rightOperand);
  33.     };
  34.  
  35.     std::string getName ()
  36.     {
  37.         return nameWorker;
  38.     }
  39.  
  40.     friend std::ostream& operator<< (std::ostream &out, const CommandFunctor &set);
  41. };
  42.  
  43.  
  44.  
  45.  
  46. class CommandSet {
  47. private:
  48.     Set<CommandFunctor*> Commands;
  49.  
  50.     int ** Registers;
  51.  
  52.     static int AND (int *left, int *right) {
  53.         return *left & *right;
  54.     }
  55.  
  56.     static int SUB (int *left, int* right) {
  57.         return left - right;
  58.     }
  59.  
  60. public:
  61.  
  62.     CommandSet (){
  63.         Registers = new int * [16];
  64.         for (int i = 0; i < 16; ++i)
  65.             Registers[i] = new int;
  66.     }
  67.  
  68.     ~CommandSet(){
  69.         for (int i = 0; i < 16; ++i)
  70.             delete Registers[i];
  71.         delete [] Registers;
  72.     }
  73.  
  74.     void put (int commandIndex, int register1, int * address)
  75.     {
  76.         switch (commandIndex)
  77.         {
  78.             case 1:
  79.                 Commands.insert (new CommandFunctor(AND, "AND", Registers[register1], address));
  80.                 break;
  81.             case 2:
  82.                 Commands.insert (new CommandFunctor(SUB, "SUB", Registers[register1], address));
  83.                 break;
  84.             default:;
  85.         }
  86.     }
  87.  
  88.     void put (int commandIndex, int register1, int register2)
  89.     {
  90.         switch (commandIndex)
  91.         {
  92.             case 1:
  93.                 Commands.insert (new CommandFunctor(AND, "AND", Registers[register1], Registers[register2]));
  94.                 break;
  95.             case 2:
  96.                 Commands.insert (new CommandFunctor(SUB, "AND", Registers[register1], Registers[register2]));
  97.                 break;
  98.             default:;
  99.         }
  100.     }
  101.  
  102.     void print () {
  103.         for (int i = 0; i < Commands.size(); ++i)
  104.         {
  105.             std::cout << *Commands.at(i) << std::endl;
  106.         }
  107.  
  108.     }
  109.  
  110. };
  111.  
  112.  
  113. #endif //ANASTASIA_COMMANDSET_HPP
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement