#include "lib/globals.h" #include "lib/fluxmap.h" #include "lib/flux.h" #include "lib/fluxsource/fluxsource.h" #include "lib/fluxmap.h" #include #include class MemoryFluxSourceIterator : public FluxSourceIterator { public: MemoryFluxSourceIterator(const TrackFlux& track): _track(track) {} bool hasNext() const override { return _count < _track.trackDatas.size(); } std::unique_ptr next() override { auto bytes = _track.trackDatas[_count]->fluxmap->rawBytes(); _count++; return std::make_unique(bytes); } private: const TrackFlux& _track; int _count = 0; }; class EmptyFluxSourceIterator : public FluxSourceIterator { bool hasNext() const override { return false; } std::unique_ptr next() override { Error() << "no flux to read"; } }; class MemoryFluxSource : public FluxSource { public: MemoryFluxSource(const DiskFlux& flux): _flux(flux) { } public: std::unique_ptr readFlux(int physicalTrack, int physicalSide) override { for (const auto& trackFlux : _flux.tracks) { if ((trackFlux->location.physicalTrack == physicalTrack) && (trackFlux->location.physicalSide == physicalSide)) return std::make_unique(*trackFlux); } return std::make_unique(); } void recalibrate() {} private: const DiskFlux& _flux; }; std::unique_ptr FluxSource::createMemoryFluxSource(const DiskFlux& flux) { return std::make_unique(flux); }