Convert from LayoutData to Layout.

This commit is contained in:
David Given
2022-09-10 19:53:05 +02:00
parent 1a4caccd07
commit a6db36e7b3
13 changed files with 180 additions and 145 deletions

View File

@@ -91,8 +91,7 @@ public:
dev.devType = DEVTYPE_FLOPDD;
dev.cylinders = config.layout().tracks();
dev.heads = config.layout().sides();
dev.sectors =
Layout::getSectorsInTrack(Layout::getLayoutOfTrack(0, 0)).size();
dev.sectors = Layout::getLayoutOfTrack(0, 0).logicalSectors.size();
adfInitDevice(&dev, nullptr, false);
int res = adfCreateFlop(&dev, (char*)volumeName.c_str(), 0);
if (res != RC_OK)

View File

@@ -63,8 +63,7 @@ public:
{
unsigned track = trackid.first;
unsigned side = trackid.second;
auto layoutdata = Layout::getLayoutOfTrack(track, side);
auto sectors = Layout::getSectorsInTrack(layoutdata);
auto trackLayout = Layout::getLayoutOfTrack(track, side);
locations.insert(Mapper::computeLocationFor(track, side));
/* If we don't have all the sectors of this track, we may need to
@@ -72,7 +71,7 @@ public:
* a time. */
if (!imageContainsAllSectorsOf(
_changedSectors, track, side, sectors))
_changedSectors, track, side, trackLayout.logicalSectors))
{
/* If we don't have any loaded sectors for this track, pre-read
* it. */
@@ -83,11 +82,11 @@ public:
/* Now merge the loaded track with the changed one, and write
* the result back. */
for (const unsigned sector : sectors)
for (unsigned sectorId : trackLayout.logicalSectors)
{
if (!_changedSectors.contains(track, side, sector))
_changedSectors.put(track, side, sector)->data =
_loadedSectors.get(track, side, sector)->data;
if (!_changedSectors.contains(track, side, sectorId))
_changedSectors.put(track, side, sectorId)->data =
_loadedSectors.get(track, side, sectorId)->data;
}
}
}

View File

@@ -164,13 +164,12 @@ Filesystem::Filesystem(std::shared_ptr<SectorInterface> sectors):
int track = p.first;
int side = p.second;
auto layoutdata = Layout::getLayoutOfTrack(track, side);
auto sectors = Layout::getSectorsInTrack(layoutdata);
if (sectors.empty())
auto trackLayout = Layout::getLayoutOfTrack(track, side);
if (trackLayout.logicalSectors.empty())
Error() << "FS: filesystem support cannot be used without concrete "
"layout information";
for (int sectorId : sectors)
for (int sectorId : trackLayout.logicalSectors)
_locations.push_back(std::make_tuple(track, side, sectorId));
}
}
@@ -269,9 +268,9 @@ Bytes Filesystem::getLogicalSector(uint32_t number, uint32_t count)
int track = std::get<0>(it);
int side = std::get<1>(it);
int sector = std::get<2>(it);
auto layoutdata = Layout::getLayoutOfTrack(track, side);
auto trackLayout = Layout::getLayoutOfTrack(track, side);
bw += _sectors->get(track, side, sector)
->data.slice(0, layoutdata.sector_size());
->data.slice(0, trackLayout.sectorSize);
}
return data;
}
@@ -288,7 +287,7 @@ void Filesystem::putLogicalSector(uint32_t number, const Bytes& data)
int track = std::get<0>(it);
int side = std::get<1>(it);
int sector = std::get<2>(it);
int sectorSize = Layout::getLayoutOfTrack(track, side).sector_size();
int sectorSize = Layout::getLayoutOfTrack(track, side).sectorSize;
_sectors->put(track, side, sector)->data = data.slice(pos, sectorSize);
pos += sectorSize;
@@ -317,8 +316,7 @@ unsigned Filesystem::getLogicalSectorCount()
unsigned Filesystem::getLogicalSectorSize(unsigned track, unsigned side)
{
auto trackdata = Layout::getLayoutOfTrack(track, side);
return trackdata.sector_size();
return Layout::getLayoutOfTrack(track, side).sectorSize;
}
void Filesystem::eraseEverythingOnDisk()