#ifndef TAPE_H #define TAPE_H #include /** * Abstract class representing a magnetic tape. * * Tape is a storage medium consisting of N cells, where each cell contains a 32-bit signed integer. * Data can be read or written into one cell at a time. Tape can be moved * one cell forward or backwards in order to change the targeted cell. * Tape performs every operation sequentially. The amount of data stored on a single tape * could exceed the amount of available RAM. Moving tape forward or backwards * is a very time-consuming operation. */ class Tape { public: /** * Advances the tape one cell forward. * * @return false if the next cell doesn't exist (reached end of tape), otherwise true. */ virtual bool seekForward() = 0; /** * Rewinds the tape one cell backwards. * * @return false if the previous cell doesn't exist (reached beginning of tape), otherwise true. */ virtual bool seekBackwards() = 0; /** * Reads data from the current cell. * * @return number, that is stored on the current cell. */ virtual int32_t read() = 0; /** * Writes data to the current cell. * * @param data Number, that should be written to the current cell. */ virtual void write(int32_t data) = 0; // default virtual destructor to prevent memory leaks in implementing classes virtual ~Tape() = default; }; #endif