mirror of
				https://github.com/davidgiven/fluxengine.git
				synced 2025-10-24 11:11:02 -07:00 
			
		
		
		
	
		
			
				
	
	
		
			78 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			78 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| #include "lib/globals.h"
 | |
| #include "lib/fluxmap.h"
 | |
| #include "lib/flux.h"
 | |
| #include "lib/fluxsource/fluxsource.h"
 | |
| #include "lib/fluxmap.h"
 | |
| #include "lib/layout.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";
 | |
| 		throw nullptr;
 | |
| 	}
 | |
| };
 | |
| 
 | |
| class MemoryFluxSource : public FluxSource
 | |
| {
 | |
| public:
 | |
|     MemoryFluxSource(const DiskFlux& flux): _flux(flux)
 | |
|     {
 | |
|     }
 | |
| 
 | |
| public:
 | |
|     std::unique_ptr<FluxSourceIterator> readFlux(int physicalTrack, int physicalSide) override
 | |
|     {
 | |
|         for (const auto& trackFlux : _flux.tracks)
 | |
|         {
 | |
| 			if ((trackFlux->trackInfo->physicalTrack == physicalTrack) && (trackFlux->trackInfo->physicalSide == physicalSide))
 | |
| 				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);
 | |
| }
 | |
| 
 |