mirror of
https://github.com/TomHarte/CLK.git
synced 2024-06-28 08:29:34 +00:00
Adds the ability to substitute a target during encoding.
This commit is contained in:
parent
3bfeebf2a1
commit
50348c9fe7
|
@ -241,12 +241,16 @@ template<class T> std::shared_ptr<Storage::Disk::Track>
|
||||||
}
|
}
|
||||||
|
|
||||||
Encoder::Encoder(std::vector<bool> &target) :
|
Encoder::Encoder(std::vector<bool> &target) :
|
||||||
target_(target) {}
|
target_(&target) {}
|
||||||
|
|
||||||
|
void Encoder::reset_target(std::vector<bool> &target) {
|
||||||
|
target_ = ⌖
|
||||||
|
}
|
||||||
|
|
||||||
void Encoder::output_short(uint16_t value) {
|
void Encoder::output_short(uint16_t value) {
|
||||||
uint16_t mask = 0x8000;
|
uint16_t mask = 0x8000;
|
||||||
while(mask) {
|
while(mask) {
|
||||||
target_.push_back(!!(value & mask));
|
target_->push_back(!!(value & mask));
|
||||||
mask >>= 1;
|
mask >>= 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -46,6 +46,8 @@ class Encoder {
|
||||||
public:
|
public:
|
||||||
Encoder(std::vector<bool> &target);
|
Encoder(std::vector<bool> &target);
|
||||||
virtual ~Encoder() {}
|
virtual ~Encoder() {}
|
||||||
|
virtual void reset_target(std::vector<bool> &target);
|
||||||
|
|
||||||
virtual void add_byte(uint8_t input) = 0;
|
virtual void add_byte(uint8_t input) = 0;
|
||||||
virtual void add_index_address_mark() = 0;
|
virtual void add_index_address_mark() = 0;
|
||||||
virtual void add_ID_address_mark() = 0;
|
virtual void add_ID_address_mark() = 0;
|
||||||
|
@ -60,7 +62,7 @@ class Encoder {
|
||||||
CRC::CCITT crc_generator_;
|
CRC::CCITT crc_generator_;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::vector<bool> &target_;
|
std::vector<bool> *target_ = nullptr;
|
||||||
};
|
};
|
||||||
|
|
||||||
std::unique_ptr<Encoder> GetMFMEncoder(std::vector<bool> &target);
|
std::unique_ptr<Encoder> GetMFMEncoder(std::vector<bool> &target);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user