mirror of
https://github.com/davidgiven/fluxengine.git
synced 2025-10-31 11:17:01 -07:00
The reader and writer now work again.
This commit is contained in:
@@ -4,6 +4,7 @@
|
||||
#include "flags.h"
|
||||
|
||||
class CwfFluxSourceProto;
|
||||
class DiskFlux;
|
||||
class EraseFluxSourceProto;
|
||||
class Fl2FluxSourceProto;
|
||||
class FluxSourceProto;
|
||||
@@ -38,6 +39,8 @@ private:
|
||||
static std::unique_ptr<FluxSource> createTestPatternFluxSource(const TestPatternFluxSourceProto& config);
|
||||
|
||||
public:
|
||||
static std::unique_ptr<FluxSource> createMemoryFluxSource(const DiskFlux& flux);
|
||||
|
||||
static std::unique_ptr<FluxSource> create(const FluxSourceProto& spec);
|
||||
static void updateConfigForFilename(FluxSourceProto* proto, const std::string& filename);
|
||||
|
||||
|
||||
75
lib/fluxsource/memoryfluxsource.cc
Normal file
75
lib/fluxsource/memoryfluxsource.cc
Normal file
@@ -0,0 +1,75 @@
|
||||
#include "lib/globals.h"
|
||||
#include "lib/fluxmap.h"
|
||||
#include "lib/flux.h"
|
||||
#include "lib/fluxsource/fluxsource.h"
|
||||
#include "lib/fluxmap.h"
|
||||
#include <fmt/format.h>
|
||||
#include <fstream>
|
||||
|
||||
class MemoryFluxSourceIterator : public FluxSourceIterator
|
||||
{
|
||||
public:
|
||||
MemoryFluxSourceIterator(const TrackFlux& track):
|
||||
_track(track)
|
||||
{}
|
||||
|
||||
bool hasNext() const override
|
||||
{
|
||||
return _count < _track.trackDatas.size();
|
||||
}
|
||||
|
||||
std::unique_ptr<const Fluxmap> next() override
|
||||
{
|
||||
auto bytes = _track.trackDatas[_count]->fluxmap->rawBytes();
|
||||
_count++;
|
||||
return std::make_unique<Fluxmap>(bytes);
|
||||
}
|
||||
|
||||
private:
|
||||
const TrackFlux& _track;
|
||||
int _count = 0;
|
||||
};
|
||||
|
||||
class EmptyFluxSourceIterator : public FluxSourceIterator
|
||||
{
|
||||
bool hasNext() const override
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
std::unique_ptr<const Fluxmap> next() override
|
||||
{
|
||||
Error() << "no flux to read";
|
||||
}
|
||||
};
|
||||
|
||||
class MemoryFluxSource : public FluxSource
|
||||
{
|
||||
public:
|
||||
MemoryFluxSource(const DiskFlux& flux): _flux(flux)
|
||||
{
|
||||
}
|
||||
|
||||
public:
|
||||
std::unique_ptr<FluxSourceIterator> readFlux(int track, int head) override
|
||||
{
|
||||
for (const auto& trackFlux : _flux.tracks)
|
||||
{
|
||||
if ((trackFlux->location.physicalTrack == track) && (trackFlux->location.head == head))
|
||||
return std::make_unique<MemoryFluxSourceIterator>(*trackFlux);
|
||||
}
|
||||
|
||||
return std::make_unique<EmptyFluxSourceIterator>();
|
||||
}
|
||||
|
||||
void recalibrate() {}
|
||||
|
||||
private:
|
||||
const DiskFlux& _flux;
|
||||
};
|
||||
|
||||
std::unique_ptr<FluxSource> FluxSource::createMemoryFluxSource(const DiskFlux& flux)
|
||||
{
|
||||
return std::make_unique<MemoryFluxSource>(flux);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user