1
0
mirror of https://github.com/TomHarte/CLK.git synced 2024-06-25 18:30:07 +00:00

Adds the ability to substitute a target during encoding.

This commit is contained in:
Thomas Harte 2020-01-19 12:11:56 -05:00
parent 3bfeebf2a1
commit 50348c9fe7
2 changed files with 9 additions and 3 deletions

View File

@ -241,12 +241,16 @@ template<class T> std::shared_ptr<Storage::Disk::Track>
}
Encoder::Encoder(std::vector<bool> &target) :
target_(target) {}
target_(&target) {}
void Encoder::reset_target(std::vector<bool> &target) {
target_ = &target;
}
void Encoder::output_short(uint16_t value) {
uint16_t mask = 0x8000;
while(mask) {
target_.push_back(!!(value & mask));
target_->push_back(!!(value & mask));
mask >>= 1;
}
}

View File

@ -46,6 +46,8 @@ class Encoder {
public:
Encoder(std::vector<bool> &target);
virtual ~Encoder() {}
virtual void reset_target(std::vector<bool> &target);
virtual void add_byte(uint8_t input) = 0;
virtual void add_index_address_mark() = 0;
virtual void add_ID_address_mark() = 0;
@ -60,7 +62,7 @@ class Encoder {
CRC::CCITT crc_generator_;
private:
std::vector<bool> &target_;
std::vector<bool> *target_ = nullptr;
};
std::unique_ptr<Encoder> GetMFMEncoder(std::vector<bool> &target);