51 lines
1.4 KiB
C
51 lines
1.4 KiB
C
|
#ifndef TAPE_H
|
||
|
#define TAPE_H
|
||
|
|
||
|
#include <cstdint>
|
||
|
|
||
|
/**
|
||
|
* 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
|