MIXAL
All Classes Files Functions Variables Typedefs Enumerations Friends Pages
Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
mixal::IODeviceStorage Class Reference

#include <io.h>

Inheritance diagram for mixal::IODeviceStorage:
mixal::IODevice mixal::IODeviceDisk mixal::IODeviceSeqReader mixal::IODeviceSeqWriter mixal::IODeviceTape mixal::IODeviceCardReader mixal::IODevicePaperTape mixal::IODeviceTypewriter mixal::IODeviceCardPunch mixal::IODeviceLinePrinter

Public Member Functions

 IODeviceStorage (int32_t storageSize=4096)
 
 IODeviceStorage (const IODeviceStorage &)=default
 
IODeviceStorageoperator= (const IODeviceStorage &)=default
 
bool ready (int32_t elapsed) override
 
void read (ComputerWord *memory, int32_t address) override
 
void write (const ComputerWord *memory, int32_t address) override
 
ComputerWordwordAt (int32_t index) override
 
- Public Member Functions inherited from mixal::IODevice
 IODevice (int32_t blockSize, bool allowRead, bool allowWrite)
 
IODeviceType type () const
 
int blockSize () const
 
bool allowRead () const
 
bool allowWrite () const
 
virtual void control (int32_t)
 

Protected Member Functions

void doRead () override
 
void doWrite () override
 

Protected Attributes

IODeviceStatus _status
 
int32_t _address
 
int32_t _locator
 
ComputerWord_memory
 
std::vector< ComputerWord_buffer
 
std::vector< ComputerWord_storage
 
- Protected Attributes inherited from mixal::IODevice
IODeviceType _type
 
int32_t _blockSize
 
bool _allowRead
 
bool _allowWrite
 
int32_t _timestamp
 
double _readyRate
 

Detailed Description

Device with a storage.

Definition at line 87 of file io.h.

Member Function Documentation

◆ doRead()

void mixal::IODeviceStorage::doRead ( )
overrideprotectedvirtual

Perform the actual reading.

Implements mixal::IODevice.

Definition at line 56 of file io.cpp.

56  {
57  for (int i = 0; i < _blockSize; ++i) {
58  _memory[_address + i] = _buffer[i];
59  }
60  _status = IODeviceStatus::READY;
61 }

References mixal::IODevice::_blockSize.

Referenced by ready().

◆ doWrite()

void mixal::IODeviceStorage::doWrite ( )
overrideprotectedvirtual

Perform the actual writing.

Implements mixal::IODevice.

Definition at line 63 of file io.cpp.

63  {
64  for (int i = 0; i < _blockSize; ++i) {
65  _storage[_locator + i] = _buffer[i];
66  }
67  _status = IODeviceStatus::READY;
68 }

References mixal::IODevice::_blockSize.

◆ read()

void mixal::IODeviceStorage::read ( ComputerWord memory,
int32_t  address 
)
overridevirtual

Read one block from the device.

Implements mixal::IODevice.

Definition at line 38 of file io.cpp.

38  {
39  _status = IODeviceStatus::BUSY_READ;
40  _address = address;
41  _memory = memory;
42  for (int i = 0; i < _blockSize; ++i) {
43  _buffer[i] = _storage[_locator + i];
44  }
46 }

References mixal::IODevice::_blockSize, mixal::IODevice::_timestamp, and ready().

◆ ready()

bool mixal::IODeviceStorage::ready ( int32_t  elapsed)
overridevirtual

Whether the device is ready for reading or writing.

Reimplemented from mixal::IODevice.

Definition at line 26 of file io.cpp.

26  {
27  bool state = IODevice::ready(elapsed);
28  if (state) {
29  if (_status == IODeviceStatus::BUSY_READ) {
30  doRead();
31  } else if (_status == IODeviceStatus::BUSY_WRITE) {
32  doWrite();
33  }
34  }
35  return state;
36 }

References doRead(), and mixal::IODevice::ready().

Referenced by read().

◆ wordAt()

ComputerWord& mixal::IODeviceStorage::wordAt ( int32_t  index)
inlineoverridevirtual

Get a word from the storage of the device.

Implements mixal::IODevice.

Definition at line 97 of file io.h.

97 { return _storage[index]; }

◆ write()

void mixal::IODeviceStorage::write ( const ComputerWord memory,
int32_t  address 
)
overridevirtual

Write one block to the device.

Implements mixal::IODevice.

Definition at line 48 of file io.cpp.

48  {
49  _status = IODeviceStatus::BUSY_WRITE;
50  for (int i = 0; i < _blockSize; ++i) {
51  _buffer[i] = memory[address + i];
52  }
54 }

The documentation for this class was generated from the following files:
mixal::IODeviceStorage::doWrite
void doWrite() override
Definition: io.cpp:63
mixal::IODevice::_blockSize
int32_t _blockSize
Definition: io.h:74
mixal::IODevice::_timestamp
int32_t _timestamp
Definition: io.h:77
mixal::IODevice::ready
virtual bool ready(int32_t elapsed)
Definition: io.cpp:14
mixal::IODeviceStorage::ready
bool ready(int32_t elapsed) override
Definition: io.cpp:26
mixal::IODeviceStorage::doRead
void doRead() override
Definition: io.cpp:56