#ifndef OCTAVE_H
#define OCTAVE_H

#include "AbstractData.h"

//Represents 1 octave value
class Octave : public AbstractData
{
public:
	// Constructors
	Octave();
	Octave(unsigned char* byte); // Parse Immidiately
    Octave(unsigned char octave, bool); // Set value

	// Direct Getters / Setters
	unsigned char GetOctave();
	void SetOctave(unsigned char value);

	// Overides
	virtual std::string GenAsm();
	virtual bool IsValid(unsigned char* byte);
	virtual bool Parse(unsigned char* byte);
	virtual unsigned int Arguments();

	std::string LookupOctString();

        enum OctaveCode : unsigned char
        {
            oct0 = 0xE7,
            oct1 = 0xE6,
            oct2 = 0xE5,
            oct3 = 0xE4,
            oct4 = 0xE3,
            oct5 = 0xE2,
            oct6 = 0xE1,
            oct7 = 0xE0
        };

private:
	unsigned char octave;
};

#endif