From 50348c9fe7907aa19c7a19a945f6bc5817161edf Mon Sep 17 00:00:00 2001 From: Thomas Harte Date: Sun, 19 Jan 2020 12:11:56 -0500 Subject: [PATCH] Adds the ability to substitute a target during encoding. --- Storage/Disk/Encodings/MFM/Encoder.cpp | 8 ++++++-- Storage/Disk/Encodings/MFM/Encoder.hpp | 4 +++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/Storage/Disk/Encodings/MFM/Encoder.cpp b/Storage/Disk/Encodings/MFM/Encoder.cpp index 642db4202..c25becfca 100644 --- a/Storage/Disk/Encodings/MFM/Encoder.cpp +++ b/Storage/Disk/Encodings/MFM/Encoder.cpp @@ -241,12 +241,16 @@ template std::shared_ptr } Encoder::Encoder(std::vector &target) : - target_(target) {} + target_(&target) {} + +void Encoder::reset_target(std::vector &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; } } diff --git a/Storage/Disk/Encodings/MFM/Encoder.hpp b/Storage/Disk/Encodings/MFM/Encoder.hpp index 225a1bb4f..48a538ec8 100644 --- a/Storage/Disk/Encodings/MFM/Encoder.hpp +++ b/Storage/Disk/Encodings/MFM/Encoder.hpp @@ -46,6 +46,8 @@ class Encoder { public: Encoder(std::vector &target); virtual ~Encoder() {} + virtual void reset_target(std::vector &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 &target_; + std::vector *target_ = nullptr; }; std::unique_ptr GetMFMEncoder(std::vector &target);