#ifndef INSTRUCTION_H
#define INSTRUCTION_H

#include <string>
#include <map>

using namespace std;

class Instruction
{
private:
    string instructionStr;
    string bitMask;
    unsigned int options;
    string getBitStr(const string &param, unsigned int length);
    enum InstructionOptions {RELATIVE_JUMP = 1, ABSOLUTE_JUMP = 2};
public:
    Instruction(const string &instructionStr, const string &bitMask, const string &options);
    unsigned int getNumParams();
    unsigned int getBitLengthParam(int paramNo);
    bool isAbsoluteJump();
    bool isRelativeJump();
    string getBitcodeOfProgramLine(const string &programLine, int lineNr, map<string, int> *labelList);
    string getBitsOfParam(unsigned int paramNo, const string &bitcode);
    string getBitMask();
    string getInstructionStr();

};

#endif // INSTRUCTION_H
