mirror of
https://github.com/davidgiven/fluxengine.git
synced 2025-10-31 11:17:01 -07:00
Remove stateful decoder and split decoder.
This commit is contained in:
@@ -234,70 +234,3 @@ void AbstractSimplifiedDecoder::pushRecord(const Fluxmap::Position& start, const
|
||||
_track->rawrecords.push_back(record);
|
||||
_fmr->seek(here);
|
||||
}
|
||||
|
||||
void AbstractStatefulDecoder::decodeToSectors(Track& track)
|
||||
{
|
||||
Sector sector;
|
||||
sector.physicalSide = track.physicalSide;
|
||||
sector.physicalTrack = track.physicalTrack;
|
||||
|
||||
FluxmapReader fmr(*track.fluxmap);
|
||||
for (;;)
|
||||
{
|
||||
nanoseconds_t clockPeriod = findSector(fmr, track);
|
||||
if (fmr.eof() || !clockPeriod)
|
||||
break;
|
||||
|
||||
sector.status = Sector::MISSING;
|
||||
sector.data.clear();
|
||||
sector.clock = clockPeriod;
|
||||
_recordStart = sector.position = fmr.tell();
|
||||
|
||||
decodeSingleSector(fmr, track, sector);
|
||||
pushRecord(fmr, track, sector);
|
||||
if (sector.status != Sector::MISSING)
|
||||
track.sectors.push_back(sector);
|
||||
}
|
||||
}
|
||||
|
||||
void AbstractStatefulDecoder::pushRecord(FluxmapReader& fmr, Track& track, Sector& sector)
|
||||
{
|
||||
RawRecord record;
|
||||
record.physicalSide = track.physicalSide;
|
||||
record.physicalTrack = track.physicalTrack;
|
||||
record.clock = sector.clock;
|
||||
record.position = _recordStart;
|
||||
|
||||
Fluxmap::Position here = fmr.tell();
|
||||
fmr.seek(_recordStart);
|
||||
record.data = toBytes(fmr.readRawBits(here, sector.clock));
|
||||
track.rawrecords.push_back(record);
|
||||
_recordStart = here;
|
||||
}
|
||||
|
||||
void AbstractStatefulDecoder::discardRecord(FluxmapReader& fmr)
|
||||
{
|
||||
_recordStart = fmr.tell();
|
||||
}
|
||||
|
||||
void AbstractSplitDecoder::decodeSingleSector(FluxmapReader& fmr, Track& track, Sector& sector)
|
||||
{
|
||||
decodeHeader(fmr, track, sector);
|
||||
if (sector.status == Sector::MISSING)
|
||||
return;
|
||||
pushRecord(fmr, track, sector);
|
||||
|
||||
nanoseconds_t clockPeriod = findData(fmr, track);
|
||||
if (fmr.eof() || !clockPeriod)
|
||||
return;
|
||||
sector.clock = clockPeriod;
|
||||
|
||||
discardRecord(fmr);
|
||||
Fluxmap::Position pos = fmr.tell();
|
||||
decodeData(fmr, track, sector);
|
||||
if (sector.status == Sector::DATA_MISSING)
|
||||
{
|
||||
fmr.seek(pos);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -68,28 +68,4 @@ protected:
|
||||
Sector* _sector;
|
||||
};
|
||||
|
||||
class AbstractStatefulDecoder : public AbstractDecoder
|
||||
{
|
||||
public:
|
||||
void decodeToSectors(Track& track);
|
||||
void discardRecord(FluxmapReader& fmr);
|
||||
void pushRecord(FluxmapReader& fmr, Track& track, Sector& sector);
|
||||
|
||||
protected:
|
||||
virtual nanoseconds_t findSector(FluxmapReader& fmr, Track& track) = 0;
|
||||
virtual void decodeSingleSector(FluxmapReader& fmr, Track& track, Sector& sector) = 0;
|
||||
|
||||
private:
|
||||
Fluxmap::Position _recordStart;
|
||||
};
|
||||
|
||||
class AbstractSplitDecoder : public AbstractStatefulDecoder
|
||||
{
|
||||
void decodeSingleSector(FluxmapReader& fmr, Track& track, Sector& sector) override;
|
||||
|
||||
virtual nanoseconds_t findData(FluxmapReader& fmr, Track& track) = 0;
|
||||
virtual void decodeHeader(FluxmapReader& fmr, Track& track, Sector& sector) = 0;
|
||||
virtual void decodeData(FluxmapReader& fmr, Track& track, Sector& sector) = 0;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user